2013-12-08 82 views
0

我在WPF中有一個PropertyGrid,我可以看到,您可以將PropertyGridSelectedObject屬性設置爲對象的實例,但我試圖找到一種方法來編輯多個對象同時,像Visual Studio中的屬性網格一樣。如果選擇多個對象並且它們共享某些屬性,則屬性網格中的編輯值將應用於每個選定的對象。PropertyGrid編輯同一類型的多個對象

所以我

ObservableCollection<SomeObject> ObjectsCollection 
ObservableCollection<SomeObject> SelectedObjects 

SelectedObject屬性綁定到的selectedObjects集合將顯示的DevExpress的PropertyGrid一行中的每個對象,但我只想要顯示的屬性,如果一個屬性編輯那麼它將應用於所有SelectedObjects

DevExpress屬性網格可以嗎?我正在使用最新版本。

回答

0

那我是怎麼做的,從視圖模型中,它的完美,但不知道工作如果最好的辦法

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); 
       } 
      } 
相關問題