我正在尝试使用 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/