WPF PropertyGrid поддерживает множественный выбор

Эта документация все еще действительна или я что-то упустил?

http://doc.xceedsoft.com/products/XceedWpfToolkit/Xceed.Wpf.Toolkit~Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid~SelectedObjects.html

PropertyGrid контроль не имеет SelectedObjects или же SelectedObjectsOverride члены. Я использую последнюю версию (2.5) набора инструментов против.NET Framework 4.0.

ОБНОВИТЬ

Ответ @faztp12 помог мне. Для тех, кто ищет решение, выполните следующие действия:

  1. Свяжите свой PropertyGrid"s SelectedObject Свойство для первого выбранного элемента. Что-то вроде этого:

    <xctk:PropertyGrid PropertyValueChanged="PG_PropertyValueChanged" SelectedObject="{Binding SelectedObjects[0]}"  />
    
  2. Слушать PropertyValueChanged событие PropertyGrid и используйте следующий код для обновления значения свойства для всех выбранных объектов.

    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);
        }
      }
    }
    

Надеюсь, что это поможет кому-то в будущем.

1 ответ

Решение

Что я делал, когда у меня была похожая проблема, я был подписан на PropertyValueChanged и имел List наполнил себя SelectedObjects,

Я проверил, если содержимое списка, где того же типа, а затем, если это так, я изменил свойство в каждом из этих элементов:

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);
                }

Я использовал это, потому что мне нужно было сделать Layout Designer, и это позволило мне вместе изменять свойства нескольких элементов:)

Надеюсь, это помогло:)

Ref Xceed Docs

Другие вопросы по тегам