0
我有一個可觀察的viewmodel對象集合。如何在創建集合時爲我的集合中的每個視圖模型訂閱Property Changed事件,並跟蹤哪些已更改,以便我可以將它們更新到我的數據庫。PropertyChanged ObservableCollection中ViewModel的事件
我有一個可觀察的viewmodel對象集合。如何在創建集合時爲我的集合中的每個視圖模型訂閱Property Changed事件,並跟蹤哪些已更改,以便我可以將它們更新到我的數據庫。PropertyChanged ObservableCollection中ViewModel的事件
我相信下面的代碼可以作爲如何解決您的問題的一個例子。在這個例子中,MyCollection是一個屬性ViewModel對象。 ViewModel實現INotifyPropertyChanged接口。
private void AddCollectionListener()
{
if (MyCollection != null)
{
MyCollection.CollectionChanged +=
new System.Collections.Specialized.NotifyCollectionChangedEventHandler(MyCollection_CollectionChanged);
}
}
void MyCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
// Remove Listeners to each item that has been removed
foreach (object oldItem in e.OldItems)
{
ViewModel viewModel = oldItem as ViewModel;
if (viewModel != null)
{
viewModel.PropertyChanged -= viewModel_PropertyChanged;
}
}
// Add Listeners to each item that has been added
foreach (object newItem in e.NewItems)
{
ViewModel viewModel = newItem as ViewModel;
if (viewModel != null)
{
viewModel.PropertyChanged += new PropertyChangedEventHandler(viewModel_PropertyChanged);
}
}
}
void viewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// TODO: Property Changed Logic
switch (e.PropertyName)
{
case "MyPropertyName":
// TODO: Perform logic necessary when MyPropertyName changes
break;
default:
// TODO: Perform logic for all other property changes.
break;
}
}
我已編輯了代碼以顯示我放置我的數據的方式。是否有可能知道對象的更新,而不是對象的添加和刪除。 – developer 2010-04-28 20:42:34
只要ViewModel上的屬性發生更改(引發PropertyChanged事件的任何屬性),viewModel_PropertyChanged處理程序就會被調用。通常你會添加一個switch語句來打開e.PropertyName。我更新了代碼以顯示一個示例,其中MyPropertyName是一個或多個ViewModel中存在的屬性。 – 2010-04-29 20:46:12
謝謝soooo much .. – developer 2010-04-29 20:51:03