我将 MVVM Light 用于带有选项卡的 WPF 应用程序(有点像 Internet Explorer)。每个选项卡都必须是几个独特的 View 和 View 模型。我知道我的选项卡控件中有多少个实例。
由于 MVVM Light 的设计,我不能同时拥有多个 ViewModel 实例(定位器中的静态属性)。在 codeplex 网站上,我找到了以下解决方案:
我处理这个问题的方法是让 ViewModelLocator 中的 ViewModel 属性(例如 MainViewModel 的 Main 属性)在每次调用时返回 MainViewModel 的不同实例。这样每个视图都会有一个单独的 MainViewModel 实例。
但是,这意味着解析给定窗口的 DataContext 有点复杂(因为 ViewModel 不再保持静态)。如果需要解析,可以在 ViewModelLocator 中根据 View 中存储的唯一 ID 构建查找表,或者使用 IOC 容器根据 key 实例化和解析 ViewModel 实例。
我知道我必须在每个视图中注入一个 ID,我知道我必须在定位器中维护这些 ID 的列表,我知道我必须在定位器中查找以将每个视图与正确的定位器相关联,但我不知道如何将此 ID 从我的视图传递到定位器。如何在我的视图的 XAML 中做到这一点?
我希望我的问题足够清楚,如果您需要更多详细信息,请告诉我。