我有視圖模型類A,它具有屬性「a」。如何在另一視圖模型中捕捉甚至是一個視圖模型的屬性
和我有班級稱爲B,它具有性能「b」,其中我存儲列表中的所有A []列表。
如果在屬性的任何變化,我想改變父類A.
即
B類 {
屬性B1的屬性;
列表A []
}
A類 {
屬性A1;
}
我使用MVVM並通知物業chnaged事件有兩個地方。我不知道如何連接兩者。
我有視圖模型類A,它具有屬性「a」。如何在另一視圖模型中捕捉甚至是一個視圖模型的屬性
和我有班級稱爲B,它具有性能「b」,其中我存儲列表中的所有A []列表。
如果在屬性的任何變化,我想改變父類A.
即
B類 {
屬性B1的屬性;
列表A []
}
A類 {
屬性A1;
}
我使用MVVM並通知物業chnaged事件有兩個地方。我不知道如何連接兩者。
在延伸ObservableCollection<T>
我BaseCollection
類,我有一個創建了一個CollectionItemPropertyChanged
delegate
,我可以附加一個處理程序,所以,當屬性值已在任何項目集合中改變了我可以通知:
public delegate void ItemPropertyChanged(T item, string propertyName);
然後我加入delegate
類型的getter和setter:
public virtual ItemPropertyChanged CurrentItemPropertyChanged { get; set; }
要做到這一點,我必須附加手柄R鍵每個項目的PropertyChanged
事件:
public BaseCollection(IEnumerable<T> collection)
{
foreach (T item in collection) Add(item);
}
public new void Add(T item)
{
item.PropertyChanged += Item_PropertyChanged;
base.Add(item);
}
我還需要刪除的處理程序時,被刪除的對象:
public new bool Remove(T item)
{
if (item == null) return false;
item.PropertyChanged -= Item_PropertyChanged;
return base.Remove(item);
}
再有就是Item_PropertyChanged
處理程序:
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (CollectionItemPropertyChanged != null) CollectionItemPropertyChanged(
currentItem, e.PropertyName);
}
那麼這可以用於你的班級B
像這樣:
public List<A> Items
{
get { return items; }
set
{
items = value;
items.CollectionItemPropertyChanged += YourHandler;
NotifyPropertyChanged(Items);
}
}
那麼你的處理程序:
private void YourHandler(A item, string propertyName)
{
// propertyName is the name of the changed property from the A object named item
}
更直接地回答你的問題,你可以從一個視圖模型附加一個處理這一delegate
在另一...例如:
Items.CollectionItemPropertyChanged += ViewModel2.YourHandler;
還是從其他視圖模型:
ViewModel1.Items.CollectionItemPropertyChanged += YourHandler;
創建視圖模型A作爲獨立的,並使用該實例更新的屬性。
你的意思是,如果類A的任何實例的屬性'a'有變化,你需要在類B中通知? – Nitin
是的。我需要相同的 –