WPF PropertyGrid支持多重选择
本文关键字:选择 支持 PropertyGrid WPF | 更新日期: 2023-09-27 18:16:46
这个文档仍然有效还是我错过了什么?
http://doc.xceedsoft.com/products/XceedWpfToolkit/Xceed.Wpf.Toolkit ~ Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid ~ SelectedObjects.html PropertyGrid
控件似乎没有SelectedObjects
或SelectedObjectsOverride
成员。我使用的是。net Framework 4.0的最新版本(2.5)。
@faztp12的回答让我明白了。对于其他正在寻找解决方案的人,请遵循以下步骤:
将
PropertyGrid
的SelectedObject
属性绑定到第一个选中的项目。像这样:<xctk:PropertyGrid PropertyValueChanged="PG_PropertyValueChanged" SelectedObject="{Binding SelectedObjects[0]}" />
监听
PropertyGrid
的PropertyValueChanged
事件,并使用以下代码更新所有选定对象的属性值。private void PG_PropertyValueChanged(object sender, PropertyGrid.PropertyValueChangedEventArgs e) { var changedProperty = (PropertyItem)e.OriginalSource; foreach (var x in SelectedObjects) { //make sure that x supports this property var ProperProperty = x.GetType().GetProperty(changedProperty.PropertyDescriptor.Name); if (ProperProperty != null) { //fetch property descriptor from the actual declaring type, otherwise setter //will throw exception (happens when u have parent/child classes) var DeclaredProperty = ProperProperty.DeclaringType.GetProperty(changedProperty.PropertyDescriptor.Name); DeclaredProperty.SetValue(x, e.NewValue); } } }
当我有类似的问题时,我所做的是我订阅了PropertyValueChanged
,并用SelectedObjects
填充了List
。
我检查了List的内容是否具有相同的类型,如果是,我更改了每个项的属性:
PropertyItem changedProperty = (PropertyItem)e.OriginalSource;
PropertyInfo t = typeof(myClass).GetProperty(changedProperty.PropertyDescriptor.Name);
if (t != null)
{
foreach (myClass x in SelectedItems)
t.SetValue(x, e.NewValue);
}
我使用这个,因为我需要做一个布局设计器,这使我能够改变多个项目的属性一起:)
希望有帮助:)
参考文档