Silverlight DataGrid.Celltemplate-Bindung an ViewModel
Ich bin dabei, das MVVC-Muster zu implementieren, und habe Probleme beim Binden einer Eigenschaft im Ansichtsmodell aus einem DataTemplate in einem Datagrid. Wenn ich einen Textblock außerhalb der DataTemplate in der Spalte habe, funktioniert er einwandfrei (da ich direkt auf den Datenkontext der UserConrol, d. H. Der VM, verweise), gibt er jedoch innerhalb der DataTemplate nicht die Nur-Text-Eigenschaft zurück. Es wird jedoch eine Eigenschaft aus dem iterierten IEnumerable-Element zurückgegeben.
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class="Timesheet.Silverlight.Modules.Views.HistoryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:Commands="clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModels="clr-namespace:Timesheet.Silverlight.Modules.ViewModels"
x:Name="View">
<StackPanel>
<TextBlock Text="{Binding Path=DataContext.testText, ElementName=View}" />
<data:DataGrid Height="280" Width="500" ItemsSource="{Binding TimeSlots}" AutoGenerateColumns="False" >
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Allocation Area" Binding="{Binding TimeAllocationArea.TimeAllocationName}" Width="200" />
<data:DataGridTextColumn Header="Start" Binding="{Binding StartTime}" Width="80" />
<data:DataGridTextColumn Header="End" Binding="{Binding Path=DataContext.testText, ElementName=View}" Width="80" />
<data:DataGridTemplateColumn Header="Modify" Width="200" >
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=DataContext.testText, ElementName=View}" />
</StackPanel>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
</StackPanel>
</UserControl>
Gibt es ein Problem mit dem DataTemplate, das ich ignoriere? Beachten Sie, dass "{Binding Path = DataContext.testText, ElementName = View}" für alle Elemente außer dem im DataTemplate funktioniert. (Hinweis: Ich weiß, dass der erste Textblock außerhalb der DG den Elementnamen usw. nicht benötigt, aber ich habe es nur auf diese Weise getan, um mir selbst zu beweisen, dass er das Richtige referenziert.)