【问题标题】:Binding between the two columns in the DataGridDataGrid 中两列之间的绑定
【发布时间】:2011-05-12 10:11:48
【问题描述】:

我有一个绑定到具有两个属性的列表的 DataGrid。

DataGrid 中的第一列是 DataGridTemplateColumn,里面有 ComboBox。

DataGrid 中的第二列是DataGridTextColumn,它与转换器绑定。

每当我更改第一列中的组合框值时,都必须触发第二列转换器。所以基于转换器中的一些计算,我可以将值返回到第二列

如何做到这一点?

【问题讨论】:

    标签: wpf binding wpfdatagrid


    【解决方案1】:

    您可以通过绑定的源将其路由,将组合框的选定项绑定到绑定的数据,然后使用转换器将选定的对象绑定到第 2 列。在两列之间共享所选项目,并在第二列中使用转换器绑定,因此它会被触发。

    更正了第 2 列绑定中的复制粘贴错误

    类似的,

    Presenter / ViewModel
    class DataSource : INotifyPropertyChanged {
      // raise PropertyChanged when required
      public ObservableCollection<string> Columns1Values {get;set;}
      // raise PropertyChanged when required
      public string SelectedColumn1Value {get; set;}
    }
    

    查看

    <dg:DataGrid
        Name="sampleDG"
        ItemsSource={Binding DataSourceObject}>
        <dg:DataGridWidget.Columns>
            <dg:DataGridTemplateColumn
                Header="Column 1">
                <datagrid:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Label Content="{Binding Path=SelectedColumn1Value, Mode=TwoWay}"/>
                    </DataTemplate>
                </datagrid:DataGridTemplateColumn.CellTemplate>
                <datagrid:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox
                            ItemsSource="{Binding Path=Column1, Mode=TwoWay}"
                            SelectedItem="{Binding Path=SelectedColumn1Value, Mode=TwoWay}"
                        />
                    </DataTemplate>
                </datagrid:DataGridTemplateColumn.CellEditingTemplate>
            </dg:DataGridTemplateColumn>
            <dg:DataGridTextColumn 
                Header="Column 2"
                Binding="{Binding Path=SelectedColumn1Value, Converter={StaticResource selectedConverter}, Mode=TwoWay}}">
            </dg:DataGridTextColumn>
        </dg:DataGridWidget.Columns>
    </dg:DataGrid>
    

    【讨论】:

    • 但是每次更改组合框时转换器将如何触发? DataGridTextColumn 中的绑定路径“列”是什么?
    • 对不起我的错误(复制粘贴错误),第 2 列应该绑定到 SelectedColumn1Value 因为这是您需要在列之间共享的成员,因此当 Column1 绑定更新它时,它的更改将触发您的转换器被要求进行第 2 列绑定。对于第 2 列,如果您不打算将选择从第 2 列修改为第 1 列,则绑定模式可以是 OneWay。
    猜你喜欢
    • 2015-02-14
    • 2011-02-04
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多