我的silverlight应用程序有2页,PageA和PageB。每个页面都绑定了相应的ViewModel,PageAViewModel和PageBViewModel。 (我将ViewModel设置为xaml中的View的DataContext。)
用户可以在这些页面之间来回切换,当用户在这些页面之间切换时,他们会创建新的PageA和PageB实例,这也会创建我不想要的ViewModel的新对象。我尝试将NavigationCacheMode设置为Enable,现在所有视图仅在用户首次导航到该页面时创建实例,这也意味着ViewModel只有一个实例。
我想知道如何控制UI只创建一个View实例并控制何时创建其ViewModel的新实例?
答案 0 :(得分:2)
这就是像Unity这样的IOC(Inversion Of Control)派上用场的地方。
您只需将ViewModel注册为Unity的单身人士(仅一人,)。
不是在View中嵌入ViewModel(非常糟糕的做法就是像这样硬连接它们),而是指定View在创建时想要的类型的ViewModel 并且匹配的ViewModel将被“注入” “进入视野。
基本的MVVM,没有其他注入框架,并没有提供太多开箱即用(除了与视图分离)。
答案 1 :(得分:1)
您是否尝试过为您的应用程序使用MVVM光框架。它支持视图模型定位器概念,可避免每次用户单击页面时重新创建VM实例。看看Laurent Bugnion的演讲here。