DataGrid双向绑定

时间:2012-01-28 17:54:35

标签: wpf data-binding datagrid dependency-properties

我有一个DataGrid,它显示了Product类型的列表。我想要做的是有一种主/细节视图,其中网格显示主数据,然后文本框(等)的集合显示详细视图。细节主要针对大型文本列,由于文本的大小,不适合在网格中显示它们。网格和详细信息区域中也显示了一些数据项。

此外,我需要它,以便网格和细节区域绑定在一起,以便更改任何一个导致基础数据源更新 - 如果(例如)网格被更改,这些更改会立即反映在细节区域,反之亦然。

我认为这可以通过绑定和依赖属性来实现 - 但是如何设置呢?

注意:由于用户可以控制网格上显示的列,因此在代码中手动定义绑定。

    var column = new DataGridTextColumn()
    {
        Header = attribute.Name,
        Binding = new Binding(attribute.ColumnName) { TargetNullValue = string.Empty },
        IsReadOnly = attribute.IsReadOnly
    };

    dgProductsList.Columns.Add(column);

1 个答案:

答案 0 :(得分:2)

如果您已将DataGrid命名为您需要做的就是将详细信息区域的DataContext绑定到网格的SelectedItem,那么该区域内的所有绑定都将是该项目的属性,例如

<DataGrid Name="dg" .../>
<Border DataContext="{Binding SelectedItem, ElementName=dg}">
    <StackPanel>
        <TextBox Text="{Binding SomeTextProperty, UpdateSourceTrigger=PropertyChanged}"/>
        <!-- ... -->
    </StackPanel>
</Border>

默认情况下,这是两种方式,添加UpdateSourceTrigger=PropertyChanged以立即更新属性,否则当焦点离开TextBox时文本会更改。