【问题标题】:PropertyGrid Editing Multiple Objects of the same typePropertyGrid 编辑多个相同类型的对象
【发布时间】:2013-12-08 22:16:21
【问题描述】:

我在 WPF 中有一个 PropertyGrid,我可以看到您可以将 PropertyGridSelectedObject 属性设置为对象的实例,但我正在尝试找到一种方法来编辑多个对象同时,例如 Visual Studio 中的属性网格。如果选择了多个对象并且它们共享某些属性,则属性网格中的编辑值将应用于每个选定的对象。

所以我有

ObservableCollection<SomeObject> ObjectsCollection
ObservableCollection<SomeObject> SelectedObjects

SelectedObject 属性绑定到SelectedObjects 集合会在DevExpress 的PropertyGrid 中连续显示每个对象,但我只想显示属性,如果编辑了一个属性,那么它将应用于所有SelectedObjects

DevExpress 属性网格有可能吗?我正在使用最新版本。

【问题讨论】:

    标签: wpf devexpress


    【解决方案1】:

    这就是我在 ViewModel 中的做法,它工作得很好,但不确定它是否是最好的方式

    private ObservableCollection<Model> items;
                public ObservableCollection<Model> Items
                {
                    get
                    {
                        return items;
                    }
                    set
                    {
                        SetField(ref items, value, "Items");
                    }
                }
    
                private ObservableCollection<Model> selectedItems;
                public ObservableCollection<Model> SelectedItems
                {
                    get
                    {
                        return selectedItems;
                    }
                    set
                    {
    
                        SetField(ref selectedItems, value, "SelectedItems");
    
                    }
                }
    
                private Model selectedItem;
                public Model SelectedItem
                {
                    get
                    {
                        return selectedItem;
                    }
                    set
                    {
                        if(selectedItem!=null)selectedItem.PropertyChanged -= ItemChanged;
                        SetField(ref selectedItem, value, "SelectedItem");
                        if(selectedItem!=null)selectedItem.PropertyChanged += ItemChanged;
                    }
                }
    
    
                private void ItemChanged(object s, PropertyChangedEventArgs e)
                {
                    if (selectedItems.Count > 1)
                    {
                        if(selectedItems.Contains(selectedItem))
                        SetMultiplePropertyValues<Model>(e.PropertyName, selectedItem.GetType().GetProperty(e.PropertyName).GetValue(s, null));
                    }
                }
    
                private void SetMultiplePropertyValues<T>(string propertyName,object value)
                {
                    var p = typeof(T).GetProperty(propertyName);
                    foreach (var item in selectedItems)
                    {
                        p.SetValue(item, value, null);
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 2011-01-30
      相关资源
      最近更新 更多