【问题标题】:DataGrid two way bindingDataGrid 双向绑定
【发布时间】:2012-01-28 17:54:34
【问题描述】:

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

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

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

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

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

    dgProductsList.Columns.Add(column);

【问题讨论】:

    标签: wpf data-binding datagrid dependency-properties


    【解决方案1】:

    如果您已命名DataGrid,您只需将详细信息区域的DataContext 绑定到网格的SelectedItem,然后该区域内的所有绑定都将绑定到项目的属性,例如

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

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

    【讨论】:

    • 这行得通并且网格的底层集合被更新(当我回到修改后的网格行时,详细信息区域用我的新值更新) - 但是实际的网格单元格没有更新。由于网格的动态特性,它的绑定是在代码中定义的。已更新问题以显示绑定代码。
    • @RemotecUk:这应该没关系,你的物品等级是implementINCP吗?
    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-04-30
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多