我在WPF中有一个PropertyGrid
,我可以看到你可以将SelectedObject
的{{1}}属性设置为一个对象的实例,但我试图找到一种方法同时编辑多个对象,例如Visual Studio中的属性网格。如果选择了多个对象并且它们共享某些属性,则属性网格中的编辑值将应用于每个选定的对象。
所以我有
PropertyGrid
将ObservableCollection<SomeObject> ObjectsCollection
ObservableCollection<SomeObject> SelectedObjects
属性绑定到SelectedObjects集合将在DevExpress的SelectedObject
中显示每行中的每个对象,但我只想显示属性,如果编辑了一个属性,那么它将会适用于所有PropertyGrid
DevExpress属性网格可以实现吗?我使用的是最新版本。
答案 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);
}
}