MvvmLightLibsStd10 и UWP - PullRequest
       19

MvvmLightLibsStd10 и UWP

0 голосов
/ 22 сентября 2018

Как создать привязку между ViewModel и View?

Раньше в App.xaml создавался локатор, а затем в представлении у вас было следующее:

DataContext="{Binding MainViewModel, Source={StaticResource ViewModelLLocator}}"

Я даже не могу щелкнуть в Свойствах представления и затем создать привязку DataContext.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Хорошо, я нашел это:

Вам нужно добавить это в App.xaml:

private static ViewModelLocator _locator;
public static ViewModelLocator Locator => _locator ?? (_locator = new ViewModelLocator());

А затем в View.xaml:

this.DataContext = App.Locator.MainViewModel;
0 голосов
/ 22 сентября 2018

В последних версиях MVVM light они изменили способ работы ViewModelLocator, поскольку он зависел от Microsoft.Practices.ServiceLocation, а первый не соответствовал .NET Standard.Теперь он должен использовать GalaSoft.MvvmLight.Ioc, чтобы найти ViewModel, используя SimpleIoc.

. Вот пример того, как я использовал его в недавнем проекте 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));
        }
    }
}
...