c# – MVVM卡住事件钩子

c# – MVVM卡住事件钩子,第1张

概述我首先要说这是一个非常简单的例子,我的问题是在一个更大的项目中,所以虽然我正在做的重组将是最好的方式它不是一个选项,我正在寻找我可以添加的东西如果可能的话,在这个例子中解决底部的问题. 我有2个viewmodels(人物和地址). Person.cs public class Person : ViewModelBase{} Address.cs public class Address : 我首先要说这是一个非常简单的例子,我的问题是在一个更大的项目中,所以虽然我正在做的重组将是最好的方式它不是一个选项,我正在寻找我可以添加的东西如果可能的话,在这个例子中解决底部的问题.

我有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卡住事件钩子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1226708.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存