Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MvvmLightLibsStd10和UWP_C#_Data Binding_Uwp_Mvvm Light - Fatal编程技术网

C# MvvmLightLibsStd10和UWP

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,而

如何在视图模型和视图之间创建绑定

过去,在App.xaml中创建了一个定位器,然后在视图上显示:

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