WPF 取消绑定 OnPropertyChanged-events



我有一个 wpf 应用程序,MVVM 风格,带有 (Telerik Rad)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);

这有效,但我需要在某处取消绑定事件吗?用户可以从此视图向后移动,并选择另一组行。此外,每次单元格更改时,我都会从施维雅获得更新的行。

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

但是我需要在某处取消绑定事件吗?

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

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

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

如果考虑使用弱事件,则还应考虑使用WeakEventManager运算符和+=运算符挂接事件处理程序之间的语义差异。

相关内容

  • 没有找到相关文章

最新更新