【问题标题】:WPF binding to a datagrid's SelectedItemWPF 绑定到数据网格的 SelectedItem
【发布时间】:2012-05-23 12:31:30
【问题描述】:

我有一个绑定到ObservableCollection<MyClass> 的数据网格,并且我有另一个数据网格,它有两个DataGridTextColumns - 名称和值。 Name 列预先填充了其值应显示在 Value 列中的属性的名称。 MyClass 实现INotifyPropertyChanged,因此MyClass 对象的任何属性更改都会更新第一个数据网格。现在,我想在第二个数据网格的“值”列中显示第一个数据网格的当前选定对象 (SelectedItem) 的属性,并在它们发生时查看属性更改,就像在第一个数据网格中一样。我怎样才能做到这一点?

如果您想知道原因,原始数据网格中只显示了一些属性,所以另一个应该显示几乎所有属性。数据网格是否是在 2 列中显示属性的好选择,还是我应该考虑其他一些控件?

【问题讨论】:

    标签: c# wpf binding datagrid


    【解决方案1】:

    这听起来像是解决一个相当普遍的问题的一种方便的方法。

    使用两个数据网格执行此操作的最简单方法是使用一些代码隐藏和反射。首先定义一个类型来显示每个属性的名称和值:

    class PropertyModel {
        private readonly string _name = "";
        private readonly object _value = null;
    
    
        public PropertyModel(string name, object value) {
           _name = name ?? "";
           _value = _value;
        }
    
        public string Name {
            get { return _name; }
        }
    
        public object Value {
            get { return _value; }
        }
    }
    

    然后在您的代码隐藏中添加一个事件处理程序来处理您的第一个数据网格上的选择更改:

    private void _onDataGrid1SelectionChanged(object sender, SelectedCellsChangedEventArgs e) {
       if (e.AddedCells.Count > 0) {
            var props = new Collection<PropertyModel>();
            var obj = _dataGrid1.SelectedItem;
            foreach(var prop in obj.GetType().GetProperties()) {
                props.Add(new PropertyModel(prop.Name, prop.GetValue(obj, null)));
            }
    
    
            _dataGrid2.ItemsSource = props;
       }
    
    }
    

    请注意,上面的代码非常粗糙,只有在 DataGrid1 将 SelectionMode 设置为 Single 时才有效。但是,如果您愿意快速而肮脏地进行操作(使用事件处理程序),这是一个很好的起点。

    另一个很好的解决方案是使用行详细信息。 This is a pretty good intro tutorial on using row details。 当然你也应该阅读msdn article on the subject

    【讨论】:

    • 谢谢迈克尔,你的代码很有帮助。它也适用于 DataGrid SelecionMode 设置为 Extended,因为 SelectedItem 属性获取当前选择中的第一个元素,这正是我所需要的。
    猜你喜欢
    • 2011-09-12
    • 2020-05-04
    • 1970-01-01
    • 2010-10-24
    • 2011-01-02
    • 2011-03-07
    • 2010-11-03
    • 2011-09-28
    相关资源
    最近更新 更多