PropertyGrid编辑相同类型的多个对象

时间:2013-12-08 22:16:22

标签: wpf devexpress

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

所以我有

PropertyGrid

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

DevExpress属性网格可以实现吗?我使用的是最新版本。

1 个答案:

答案 0 :(得分:0)

多数民众赞成我是如何从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);
                }
            }
相关问题