我有一个现有的 Silverlight 4 应用程序,我试图将其转换为使用定位器模式和 MVVM-Light 库。
我的理解是 MvvmLocator 类保留对每个视图模型的引用,并允许您将每个视图的 DataContext 绑定到定位器中的适当 ViewModel。
我的应用程序使用导航框架,因此应用程序中的每个页面都是加载到内容框架中的 UserControl。
我可以看到将每个页面视图绑定到定位器中的适当 ViewModel 是多么容易,但我的问题是我有其他 UserControls 具有自己的视图模型,这些视图模型可以在多个上下文中重复使用,如果每个实例都会导致问题控件的绑定到相同的最终视图模型实例。
例如,我有一个包含 2 个用户控件的搜索页面。第一个是搜索参数控件,其中包含几个相互依赖的组合框和一个搜索按钮。第二个是结果网格本身。包含这两个控件的页面的视图模型处理它们之间的通信。问题是这个搜索控件也会在其他页面上使用,并且让它们都使用相同的视图模型实例会导致各种令人头疼的问题。因此,使用普通的“DataContext={Binding ProductSearch, Source={StaticResource Locator}}”似乎是不可能的......
有没有其他人遇到过这个问题或有任何好主意如何解决它?我在想也许我可以修改定位器,为使用控件的每个页面创建一个新的视图模型实例。否则,我可以对每个页面转换强制进行清理,但是我将无法保存页面之间的状态。
我是整个 Silverlight 和 MVVM 世界的新手,所以也许我错过了关于这一切应该如何构建的一些东西,或者把自己画到了一个角落。我只是不确定。我绝对欢迎任何建议。