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
和从中删除的,您还应该检测何时发生这种情况,并相应地注册和注销事件处理程序。如果 MyRows
是 ObservableCollection<T>
,您可以 CollectionChanged
事件。
如果您考虑使用弱事件,您还应该考虑使用 WeakEventManager
和 +=
运算符来连接事件处理程序之间的 。
我有一个 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
和从中删除的,您还应该检测何时发生这种情况,并相应地注册和注销事件处理程序。如果 MyRows
是 ObservableCollection<T>
,您可以 CollectionChanged
事件。
如果您考虑使用弱事件,您还应该考虑使用 WeakEventManager
和 +=
运算符来连接事件处理程序之间的