C# WPF解除绑定OnPropertyChanged事件

C# 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

我有一个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);
    
    这是可行的,但我是否需要在某个地方解除事件绑定?用户可以从此视图向后移动,并选择另一组行。此外,每次有单元格更改时,我都会从施维雅那里获得更新的行

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

    但是我需要在某个地方解开这些事件吗

    这取决于所涉及对象的生存期。如果您不希望
    MyRowModel
    对象在导航离开视图模型时阻止它成为垃圾收集,则应在视图
    卸载时注销事件处理程序,并在视图
    加载时注册它们:

     MyRows.ForEach(p=> p.PropertyChanged -= MyPropertyChangedHandler);
    
    如果在
    MyRows
    中动态添加和删除项目,您还应该检测何时发生这种情况,并相应地注册和注销事件处理程序。如果
    MyRows
    是一个
    ObservableCollection
    ,则可以更改
    CollectionChanged
    事件


    如果您考虑使用弱事件,您还应该考虑使用<代码>弱事件管理器< /> >和<代码> += 运算符来连接事件处理程序。

    尝试<代码>弱事件< /代码>。您可以使用WPF实现或开源。最后,您可以实现自己。这不是魔术。问题1。从
    GridView
    中删除/删除任何行时分离这些事件。问题2。这些视图模型是
    模型
    ,因为它们没有任何与之相关联的
    视图
    。感谢您的回答。我将检查在哪里可以分离事件,并检查弱事件。好吧,这是有道理的称呼他们的模型,因为他们没有一个view@Cowborg什么类型是MyRows
    ?如何绑定MyRows,能否显示XAML?如何做到这一点用户可以从该视图移回,并选择另一组行。当用户退出该视图时,我现在“手动”注销事件