c# – MVVM卡住事件钩子
发布时间:2020-12-15 20:56:53 所属栏目:百科 来源:网络整理
导读:我首先要说这是一个非常简单的例子,我的问题是在一个更大的项目中,所以虽然我正在做的重组将是最好的方式它不是一个选项,我正在寻找我可以添加的东西如果可能的话,在这个例子中解决底部的问题. 我有2个viewmodels(人物和地址). Person.cs public class Perso
我首先要说这是一个非常简单的例子,我的问题是在一个更大的项目中,所以虽然我正在做的重组将是最好的方式它不是一个选项,我正在寻找我可以添加的东西如果可能的话,在这个例子中解决底部的问题.
我有2个viewmodels(人物和地址). Person.cs public class Person : ViewModelBase { } Address.cs public class Address : ViewModelBase { public Address() : base() { Model.OnModelChanged += Model_OnModelChanged; } private void Model_OnModelChanged(object sender,EventArgs e) { } } 正如您所看到的,建筑上的地址正在与模型挂钩,这是重要的部分! 这两个对象的视图是. Person.xaml <Style TargetType="{x:Type local:Person}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:Person}"> <StackPanel Orientation="Vertical"> <TextBlock Text="Person"/> <local:Address/> </StackPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> Address.xaml <Style TargetType="{x:Type local:Address}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:Address}"> <TextBlock Text="Address"/> </ControlTemplate> </Setter.Value> </Setter> </Style> Person视图自己引入了Address viewmodel,如果我将2个Person实例添加到主窗口的列表中,该视图将创建2个新的Address实例,这是设计和很好的. 我的问题是,如果从集合中删除Person的一个实例,则会留下2个人和地址实例,一个由事件挂钩保存在内存中的实例. 如果视图模型已经通过视图引入可视树并挂钩事件,您如何摆脱它们? 解决方法
实现IDisposable并删除OnModelChanged的监听器,我不确定是否需要在两个类中实现idisposable,并在person类中调用dispose on address.但你肯定要删除地址Dispose方法中的监听器.
另一个选择是查看弱事件模式,但我不熟悉它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |