В последних версиях 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));
}
}
}