列表绑定到Silverligh 4中的DataGrid:
<data:DataGrid
x:Name="dataGrid"
ItemsSource="{Binding DetailsCollection}"
IsReadOnly="True">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding IsDirty, Converter={StaticResource IsDirtyConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
绑定到DataGridTemplateColumn中TextBlock的IsDirty属性是DetailsCollection的一个属性。 DataGridTemplateColumn中的Binding正在查看列表中特定项的属性。如何更改该行为以获取列表的属性?
答案 0 :(得分:1)
你不能“开箱即用”。原因是DataGridCell的DataContext设置为它绑定的项目。有几种不同的方法可以做到这一点。最简单的方法可能就是修改您的数据项以引用回列表。如果您需要这么做,您可能需要编写一个工具来帮助您。
您可以创建一个名为AncestorDataContext的附加属性,该属性遍历显示树(请参阅VisualTreeHelper)并按名称搜索目标元素。当它找到它时,它将它的FrameworkElement的DataContext设置为找到的控件DataGrid。我一直在使用这种方法来弥补SL中缺少RelativeSource FindAncestor。
<DataTemplate><Border custom:AncestorDataContext="dataGrid">
<TextBlock Text="{Binding ItemsSource.IsDirty, Converter={StaticResource IsDirtyConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" />