c# - 从代码访问 MVVM Light ViewModelLocator

标签 c# .net wpf mvvm-light

我正在尝试使用 MVVM Light Toolkit 实现一个应用程序,但不知何故我被 ViewModelLocator 困住了。

虽然我很清楚如何从 XAML 中的 View 和 View 的代码隐藏中访问它,但我在从其他 View 模型访问它时遇到一些问题。

在 App.xaml 中:

<Application.Resources>
  <vm:ViewModelLocatorTemplate xmlns:vm="clr-namespace:MvvmLight1.ViewModel" x:Key="Locator" />
</Application.Resources>

在 View 中:

DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelName}"

但是如何从其他 View 模型访问例如 MainViewModel? 似乎以前版本的 ViewModelLocator 片段有一个针对不同 View 模型的静态方法。但是那些已经不存在了,所以我认为这不是可行的方法。但什么是?或者如果我想从 View 模型访问定位器,我是否在做一些完全违反模式的事情?

最佳答案

在一定程度上取决于您如何设置 View 模型定位器,但通常您应该使用 IOC 容器来注册所有不同的 ViewModel。

例如,当使用 MVVM Light 之一时,它会是这样的: SimpleIoc.Default.Register<MainViewModel>();

因此,当它可用时,您可以在任何其他类中使用它 - 也可以在另一个 View 模型中使用: SimpleIoc.Default.GetInstance<MainViewModel>();

或者,如果您告诉 ServiceLocator 您正在使用 SimpleIoc,它会像这样: (登记) ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

然后找回来 ServiceLocator.Current.GetInstance<MainViewModel>();

关于c# - 从代码访问 MVVM Light ViewModelLocator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33504877/

相关文章:

c# - 如何在 Android 中使用信号器

c# - 使用后台线程生成的 RenderTargetBitmap 设置图像源

c# - Linq2Db 模板文件导致 SSL 连接错误并出现文件未找到异常

c# - 是否有 C# 格式说明符会省略前导零,除非值为零?

c# - Protobuf 网络 : Nested IEnumerable objects

C# 如何在 C# 中刷新串口

c# - 如何将 int 或 bool 转换为 checkState

.net - 将 .NET WebService 暴露给其他平台 (Java)

c# - 从代码中找到ControlTemplate

.net - 如何确保在数据绑定(bind)的 ListBox 中没有选择任何项目?