如果我先解釋我的代碼結構,然後嘗試問我的問題,這將是最簡單的。使用MVVM中的自定義mutator將項添加到綁定到ObservableCollection的WPF DataGrid C#
我有一個基類包含一些簡單的屬性。我們將稱這BaseClass。然後我有幾個其他類擴展BaseClass。我們稱之爲SubClass1,Subclass2和SubClass3。現在我有這個視圖模型,它包含這個私有成員:
private ObservableCollection<BaseClass> objs = new ObservableCollection<BaseClass>();
視圖模型的初始化包含這樣的:現在
objs.Add(new SubClass1(attribute1, attribute2));
objs.Add(new SubClass3(attribute1, attribute2));
objs.Add(new SubClass1(attribute1, attribute2));
objs.Add(new SubClass2(attribute1, attribute2));
,在這種情況下,我有3個獨立的數據網格。我想這三個從OBJ文件畫,但我想一個展示型SubClass1,一個只對象,以顯示型SubClass2的唯一對象,最後顯示型SubClass3的唯一對象。我已成功通過創建屬性爲每個如下:
public ObservableCollection<SubClass1> SubClass1Objs
{
get
{
ObservableCollection<SubClass1> subObjs = new ObseleCollection<SubClass1>();
if (objs != null)
foreach (BaseClass obj in objs)
if(obj.GetType() == typeof(SubClass1))
subObjs .Add((SubClass1)obj);
return subObjs ;
}
}
其他2是相同的。我將每個數據網格的ItemSource綁定到它們的屬性。這一切都有效。
用戶當前可以編輯數據網格中的任何項目,並且這些更改將反映在objs中。但是,如果用戶嘗試將項目添加到數據網格,則這些項目不會添加到objs中,並且正確;我的屬性沒有增變器(setter)。這是我的問題所在。我有麻煩提出了什麼樣的mutators看起來像添加一個新的對象的集合。有沒有人有任何想法?謝謝!
需要三個單獨收集看法,並不集合。請參閱ICollectionView接口和ListCollectionView類(很抱歉,很難從手機發布鏈接) – Dennis
您可以使用集合視圖或可觀察集合,但不應在屬性獲取器中創建可觀察集合的新實例,它是問題。在viewmodel級別創建一個單獨的實例,並使用SubClass1實例填充它。添加到該集合的任何對象都將自動出現在網格中,並且如果網格創建新實例,它將自動添加到它綁定的集合中。使用收集更改的事件來檢測這些更改。 – user469104
@Dennis所以你是說,而不是我的屬性被類型ObservableCollection,他們應該是ListCollectionViews類型? – Chris