我有一个DataGrid,它显示了Product类型的列表。我想要做的是有一种主/细节视图,其中网格显示主数据,然后文本框(等)的集合显示详细视图。细节主要针对大型文本列,由于文本的大小,不适合在网格中显示它们。网格和详细信息区域中也显示了一些数据项。
此外,我需要它,以便网格和细节区域绑定在一起,以便更改任何一个导致基础数据源更新 - 如果(例如)网格被更改,这些更改会立即反映在细节区域,反之亦然。
我认为这可以通过绑定和依赖属性来实现 - 但是如何设置呢?
注意:由于用户可以控制网格上显示的列,因此在代码中手动定义绑定。
var column = new DataGridTextColumn()
{
Header = attribute.Name,
Binding = new Binding(attribute.ColumnName) { TargetNullValue = string.Empty },
IsReadOnly = attribute.IsReadOnly
};
dgProductsList.Columns.Add(column);
答案 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
时文本会更改。