C# MvvmLightLibsStd10和UWP
如何在视图模型和视图之间创建绑定 过去,在App.xaml中创建了一个定位器,然后在视图上显示:C# MvvmLightLibsStd10和UWP,c#,data-binding,uwp,mvvm-light,C#,Data Binding,Uwp,Mvvm Light,如何在视图模型和视图之间创建绑定 过去,在App.xaml中创建了一个定位器,然后在视图上显示: DataContext="{Binding MainViewModel, Source={StaticResource ViewModelLLocator}}" 我甚至无法单击视图的属性,然后创建DataContext绑定。在最新版本的MVVM light中,他们更改了ViewModelLocator的工作方式,因为它依赖于Microsoft.Practices.ServiceLocation,而
DataContext="{Binding MainViewModel, Source={StaticResource ViewModelLLocator}}"
我甚至无法单击视图的属性,然后创建DataContext绑定。在最新版本的MVVM light中,他们更改了ViewModelLocator的工作方式,因为它依赖于Microsoft.Practices.ServiceLocation,而前者不符合.NET标准。它现在应该使用GalaSoft.MvvmLight.Ioc来使用SimpleIoc定位ViewModel 下面是我如何在最近的UWP项目中使用它的一个示例 在App.xaml中
private ViewModels.ViewModelLocator Locator => Application.Current.Resources["Locator"] as ViewModels.ViewModelLocator;
在MainPage.xaml中
DataContext="{Binding MainViewModel, Source={StaticResource Locator}}">
在MainPage.cs中
private MainViewModel ViewModel
{
get { return DataContext as MainViewModel; }
}
在ViewModelLocator.cs中
namespace YourNamespace.ViewModels
{
public class ViewModelLocator
{
public ViewModelLocator()
{
Register<MainViewModel, MainPage>();
}
public MainViewModel MainViewModel => SimpleIoc.Default.GetInstance<MainViewModel>();
public void Register<VM, V>()
where VM : class
{
SimpleIoc.Default.Register<VM>();
NavigationService.Configure(typeof(VM).FullName, typeof(V));
}
}
}
好吧,我发现了:
您需要在App.xaml中添加以下内容:
private static ViewModelLocator _locator;
public static ViewModelLocator Locator => _locator ?? (_locator = new ViewModelLocator());
然后在View.xaml中:
this.DataContext = App.Locator.MainViewModel;
我不知道最好的办法是什么?我也会试试你的解决方案。如果你已经成功了,那就是正确的方法。我用的是老办法,但我把默认的ServciceLocator改为Autofac