DataGrid:将DataGridTemplateColumn内部绑定到列表的属性

时间:2011-02-11 17:56:36

标签: silverlight silverlight-4.0 datagrid datagridtemplatecolumn

列表绑定到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正在查看列表中特定项的属性。如何更改该行为以获取列表的属性?

1 个答案:

答案 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" />

相关问题