
我有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方法中的监听器.另一个选择是查看弱事件模式,但我不熟悉它.
总结以上是内存溢出为你收集整理的c# – MVVM卡住事件钩子全部内容,希望文章能够帮你解决c# – MVVM卡住事件钩子所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)