WPF 取消绑定 OnPropertyChanged 事件

WPF Unbinding OnPropertyChanged-events

我有一个 wpf 应用程序,MVVM 风格,带有 (Telerik Rad)Gridview。我希望每次用户更新单元格时都有一个事件。

GridView 绑定到 MyRowModel

public class MyRowModel : INotifyPropertyChanged 
{
   //...
     public event PropertyChangedEventHandler PropertyChanged;
     protected void OnPropertyChanged([CallerMemberName] string name = null)
     {
          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
     }
}

我想在我的视图模型中处理它们,我这样绑定它们

var rows  = MyRows.ForEach(p=> p.PropertyChanged += MyPropertyChangedHandler);

这可行,但我需要在某处取消绑定事件吗?用户可以从该视图返回,select 另一组行。此外,每当有单元格更改时,我都会从 servier 获取更新的行。

2、加分题) 这些(在我的例子中是 MyRowModel )是视图模型还是模型?

but do I need to unbind the events somewhere?

这取决于所涉及对象的生命周期。如果您不希望 MyRowModel 对象在您离开视图模型时阻止视图模型被垃圾回收,则应在视图为 Unloaded 时取消注册事件处理程序,并在视图模型为 Unloaded 时注册它们是 Loaded:

 MyRows.ForEach(p=> p.PropertyChanged -= MyPropertyChangedHandler);

如果项目是动态添加到 MyRows 和从中删除的,您还应该检测何时发生这种情况,并相应地注册和注销事件处理程序。如果 MyRowsObservableCollection<T>,您可以 CollectionChanged 事件。

如果您考虑使用弱事件,您还应该考虑使用 WeakEventManager+= 运算符来连接事件处理程序之间的