c# – WPF PropertyGrid支持多种选择
作者:互联网
这个文档是否仍然有效或者我遗漏了什么?
PropertyGrid控件似乎没有SelectedObjects或SelectedObjectsOverride成员.我正在使用针对.NET Framework 4.0的Toolkit的最新版本(2.5).
UPDATE
@ 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并使用List填充了SelectedObjects.
我检查了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);
}
我用这个是因为我需要制作一个布局设计师,这使我能够一起更改多个项目的属性:)
希望它有帮助:)
标签:c,wpf,propertygrid,wpf-extended-toolkit 来源: https://codeday.me/bug/20190702/1357659.html