Muh*_*Kuh 2 .net c# wpf mvvm-light
我正在尝试使用MVVM Light Toolkit实现一个应用程序,但我不知何故坚持使用ViewModelLocator.
虽然我很清楚如何从XAML中的视图和视图的代码隐藏中访问它,但是从其他视图模型访问它时遇到了一些问题.
在App.xaml中:
<Application.Resources>
<vm:ViewModelLocatorTemplate xmlns:vm="clr-namespace:MvvmLight1.ViewModel" x:Key="Locator" />
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
在视图中:
DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelName}"
Run Code Online (Sandbox Code Playgroud)
但是如何从其他视图模型中访问例如MainViewModel?似乎以前版本的ViewModelLocator片段对不同的视图模型有一个静态方法.但那些不再存在,所以我认为这不是要走的路.但是什么呢?或者如果我想从视图模型访问定位器,我是否完全违背了模式?
Dep*_*hie 10
取决于您如何设置视图模型定位器,但通常您应该使用IOC容器来注册所有不同的ViewModel.
例如,当使用MVVM Light之一时,它将是这样的:
SimpleIoc.Default.Register<MainViewModel>();
因此,当它可用时,您可以在任何其他类中使用它 - 所以在另一个视图模型中也可以使用:
SimpleIoc.Default.GetInstance<MainViewModel>();
或者,如果您告诉ServiceLocator您正在使用SimpleIoc,它将是这样的:(注册)
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
并得到它
ServiceLocator.Current.GetInstance<MainViewModel>();
| 归档时间: |
|
| 查看次数: |
6389 次 |
| 最近记录: |