WPF绑定到DataRow列

时间:2010-04-15 01:44:57

标签: wpf binding wpfdatagrid

我从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 个答案:

答案 0 :(得分:1)

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

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

但是我明确指定了DataTable的第一行([0])。我之前没有使用过WPF DataGrid所以我不确定如何获取当前正在绑定的行索引...我会看到我可以解决的问题并在找到后进行更新。