WPF 绑定到 DataRow 列

Posted

技术标签:

【中文标题】WPF 绑定到 DataRow 列【英文标题】:WPF Binding to DataRow Columns 【发布时间】:2011-02-08 04:36:46 【问题描述】:

我从http://sweux.com/blogs/smoura/index.php/wpf/2009/06/15/wpf-toolkit-datagrid-part-iv-templatecolumns-and-row-grouping/ 中获取了一些示例代码,这些代码提供了 WPF DataGrid 中的数据分组。我正在修改示例以使用 DataTable 而不是实体集合。

我的问题是在翻译绑定声明 Binding Parent.IsExpanded,它工作正常,其中 Parent 是对具有 IsExpanded 属性的实体的引用,它适用于我的弱类型 DataTable,其中 Parent 是列的名称并引用同一 DataTable 中的另一个 DataRow。我尝试过像 Binding Parent.Items[IsExpanded] 和 Binding Parent("IsExpanded") 这样的声明,但这些似乎都不起作用。

如何在我的 DataTable 中创建与 DataRow Parent 的 IsExpanded 列的绑定?

提前致谢, 戴夫

编辑:我为这个问题的一般情况创建了一些示例代码:

Window1.xaml:

<Window x:Class="Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:WpfToolkit="http://schemas.microsoft.com/wpf/2008/toolkit" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
        <WpfToolkit:DataGrid 
            Name="dgSampleData" 
            ItemsSource="Binding" 
            AutoGenerateColumns="True" 
            Margin="0,75,0,0"> 
            <WpfToolkit:DataGrid.Columns> 
                <WpfToolkit:DataGridTextColumn 
                    Header="Bound Data" 
                    Binding="Binding Col3.Item(0)" 
                    /> 
            </WpfToolkit:DataGrid.Columns> 
        </WpfToolkit:DataGrid> 
    </Grid> 
</Window> 

Window1.xaml.vb:

Imports System.Data 

Class Window1 

    Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded 

        Dim dtSampleData As New DataTable 
        dtSampleData.Columns.Add("Col1") 
        dtSampleData.Columns.Add("Col2") 
        dtSampleData.Columns.Add("Col3") 
        dtSampleData.Rows.Add(dtSampleData.NewRow()) 
        dtSampleData.Rows.Add(dtSampleData.NewRow()) 
        dtSampleData.Rows(0).Item(0) = "r1c1" 
        dtSampleData.Rows(0).Item(1) = "r1c2" 
        dtSampleData.Rows(0).Item(2) = dtSampleData.Rows(0) 
        dtSampleData.Rows(1).Item(0) = "r2c1" 
        dtSampleData.Rows(1).Item(1) = "r2c2" 
        dtSampleData.Rows(1).Item(2) = dtSampleData.Rows(0) 
        dgSampleData.DataContext = dtSampleData 

    End Sub 

End Class

我尝试使用 Binding="Binding Col3.Item(0)" 行来显示值 r1c1,但单元格内容中没有出现任何内容。这是为什么? Item(0) 不应该只是 Col3 的另一个属性吗?

【问题讨论】:

【参考方案1】:

此绑定表达式将绑定到设置为视图 DataContext 的对象上名为 BindingDataTable 的 DataTable 属性上名为 IsExpanded 的列。

<CheckBox IsChecked="Binding BindingDataTable.(Rows)[0][IsExpanded]" 
          Content="Test"></CheckBox>

但是,我明确指定了 DataTable 的第一行 ([0])。我之前没有使用过 WPF DataGrid,所以目前我不确定如何获取当前绑定的行索引...我会看看我能解决什么问题,如果找到的话,我会更新。

【讨论】:

感谢西蒙。每行都有一个名为 Parent 的列,它是对 DataTable 中其他行之一的引用。这有帮助吗? @Trindaz 你试图将 Parent.IsExpandable 值绑定到什么?某种类型的DataGridColumn 通过 Binding 属性?

以上是关于WPF 绑定到 DataRow 列的主要内容,如果未能解决你的问题,请参考以下文章

DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法

如何在 DataGridView 中获取选定的 DataRow?

如何从DataGridView中的行获取DataRow

对一个 DataGridView 列使用来自两个不同 DataRow.Columns 的值

使用 DataRow 的 DataBinding - 问题

DataRow在c#中获取连接表的重复列的值