C# WPF解除绑定OnPropertyChanged事件
我有一个wpf应用程序,MVVM风格,带有(Telerik Rad)Gridview。我希望每次用户更新单元格时都有一个事件 GridView绑定到MyRowModelC# WPF解除绑定OnPropertyChanged事件,c#,wpf,mvvm,gridview,telerik-grid,C#,Wpf,Mvvm,Gridview,Telerik Grid,我有一个wpf应用程序,MVVM风格,带有(Telerik Rad)Gridview。我希望每次用户更新单元格时都有一个事件 GridView绑定到MyRowModel public class MyRowModel : INotifyPropertyChanged { //... public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([Ca
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
对象在导航离开视图模型时阻止它成为垃圾收集,则应在视图卸载时注销事件处理程序,并在视图加载时注册它们:
MyRows.ForEach(p=> p.PropertyChanged -= MyPropertyChangedHandler);
如果在MyRows
中动态添加和删除项目,您还应该检测何时发生这种情况,并相应地注册和注销事件处理程序。如果MyRows
是一个ObservableCollection
,则可以更改CollectionChanged
事件
如果您考虑使用弱事件,您还应该考虑使用<代码>弱事件管理器< /> >和<代码> += 运算符来连接事件处理程序。
尝试<代码>弱事件< /代码>。您可以使用WPF实现或开源。最后,您可以实现自己。这不是魔术。问题1。从GridView
中删除/删除任何行时分离这些事件。问题2。这些视图模型是模型
,因为它们没有任何与之相关联的视图
。感谢您的回答。我将检查在哪里可以分离事件,并检查弱事件。好吧,这是有道理的称呼他们的模型,因为他们没有一个view@Cowborg什么类型是MyRows
?如何绑定MyRows,能否显示XAML?如何做到这一点用户可以从该视图移回,并选择另一组行。当用户退出该视图时,我现在“手动”注销事件