【问题标题】:DataGrid: Binding inside of DataGridTemplateColumn to property of the listDataGrid:将 DataGridTemplateColumn 内部绑定到列表的属性
【发布时间】:2011-02-11 17:56:35
【问题描述】:

在 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 中的绑定正在查看列表中特定项目的属性。我怎样才能改变这种行为以获取列表的属性?

【问题讨论】:

    标签: silverlight silverlight-4.0 datagrid datagridtemplatecolumn


    【解决方案1】:

    您不能“开箱即用”地做到这一点。原因是 DataGridCell 的 DataContext 设置为它所绑定的项。有几种不同的方法可以做到这一点。最简单的方法可能就是修改您的数据项以返回列表。如果您经常需要这样做,您可能需要编写一个工具来帮助您。

    您可以创建一个名为 AncestorDataContext 之类的附加属性,该属性遍历显示树(请参阅 VisualTreeHelper)并按名称搜索目标元素。当它找到它时,它会将它的 FrameworkElement 的 DataContext 设置为找到的控件,即您的 DataGrid。我一直在使用这种方法来弥补 SL 中相对源 FindAncestor 的不足。

    <DataTemplate><Border custom:AncestorDataContext="dataGrid">
      <TextBlock Text="{Binding ItemsSource.IsDirty, Converter={StaticResource IsDirtyConverter}}"  HorizontalAlignment="Center" VerticalAlignment="Center" />
    

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 2011-10-25
      • 2011-04-30
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多