MVVM ViewModel-Model

时间:2014-02-26 19:27:58

标签: c# mvvm windows-runtime winrt-xaml

我可以在ViewModel中创建View的实例,还是不合适?我需要它,因为Command的{​​{1}}会根据MenuFlyoutItem的内容动态更改(Button内容取决于Button文件)

1 个答案:

答案 0 :(得分:2)

通常,ViewModel生命周期有两种方法 - 单例并绑定到视图的特定实例。对于在应用的整个生命周期内与某个ViewModels绑定的全局View,您将创建ViewModel的单例实例。此示例可以是应用程序根页的ViewModel。此页面肯定只会出现在导航堆栈中一次,因此您可以安全地只使用一个实例。当用户有一种方法在导航堆栈中多次重复View时,就会出现问题。如果您只使用ViewModel的一个单例实例,通过导航到View的第二个实例,您将基本上丢失与前一个实例关联的数据,并且在导航回来后您将看到不同的数据。示例是购物应用,您有产品(A),在产品视图中有相关项目列表。如果用户选择其中一个(比如产品B),则在单个ViewModel的cas中,实例将被刷新以包含产品B的数据,并且当返回时,您将不得不手动将数据更改回产品A通过为导航堆栈中的绑定ViewModel的每个实例提供一个View的多个实例,您可以避免重新加载数据,例如,如果从远程服务获取数据,这可能会很昂贵,例如。您始终可以管理全局数组中的所有活动ViewModels,并删除对不再需要的引用的引用,以便可以从内存中释放它们。