2013-12-19 123 views
1

我有一個ObservableCollection對象(例如與第一個/姓氏的人),我想要在ItemsControl中顯示。每個項目都顯示在一個自定義的「編輯器」控件中,該控件允許編輯該對象的屬性。 這部分工作正常,相當標準。ItemsControl與數據綁定ItemsSource和元素的雙向綁定(可替換項目)

<ItemsControl ItemsSource="{Binding Persons}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <custom:PersonEditor Person="{Binding}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

但是,自定義編輯控件也有可能取代被收到(而不是隻需要編輯一個人的名字,一個新的Person對象代替它)的整個物體的能力。

我在尋找的是一種將這種改變推回到ObservableCollection的方法。就像現在一樣,在編輯器中更改Person對象不會替換列表中的項目,這將是期望的結果。

任何幫助,將不勝感激。

回答

0

如果您無權訪問自定義控件,您可以嘗試使用屬性上的setter來清除ObservableCollection並重新添加項目,而不是直接替換它。

例如:

private ObservableCollection<MyModel> _dataSource; 

public ObservableCollection<MyModel> DataSource 
{ 
    get 
    { 
     return _dataSource; 
    } 

    set 
    { 
     _dataSource.Clear(); 

     foreach(var item in value) 
     { 
      _dataSource.Add(item); 
     } 
    } 
} 

這將阻止該項目本身得到替換導致與ItemSources問題,因爲他們顯然只能綁定到項目屬性一次。

+0

「他們顯然只綁定到物品屬性一次。」這不是我的經驗。 –