Как написано в названии, у меня проблема с моим приложением MvvmLight в Xamarin.Forms. У меня такой код для моего образцового ViewModel.Как зарегистрировать ViewModel с введением конструктора в LightMvvm Xamarin.Forms?
public interface IMainViewModel
{
}
public class MainViewModel : ViewModelBase, IMainViewModel
{
private readonly IDataService<Todoo> _dataService;
private readonly INavigationService _navigationService;
public MainViewModel(IDataService<Todoo> dataService, INavigationService navigationService)
{
if (navigationService == null)
throw new ArgumentNullException(nameof(navigationService), "Navigation service cannot be null");
_navigationService = navigationService;
if (dataService == null)
throw new ArgumentNullException(nameof(dataService), "Data service cannot be null");
_dataService = dataService;
NavigationCommand = new RelayCommand<string>(parameter => Navigate(parameter));
}
private void Navigate(string parameter)
{
// _navigationService.NavigateTo(ViewModelLocator.MainPage, parameter ?? string.Empty);
_navigationService.NavigateTo(ViewModelLocator.AddNewTodooPage);
}
public RelayCommand<string> NavigationCommand { get; private set; }
}
Это ViewModelLocator
public class ViewModelLocator
{
public const string MainPage = "MainPage";
public const string AddNewTodooPage = "AddNewTodooPage";
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<IMainViewModel, MainViewModel>();
SimpleIoc.Default.Register<IAddNewTodooViewModel, AddNewTodooViewModel>();
}
public MainViewModel Main => ServiceLocator.Current.GetInstance<MainViewModel>();
public AddNewTodooViewModel AddNewTodoo => ServiceLocator.Current.GetInstance<AddNewTodooViewModel>();
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
И App.cs
public partial class App
{
private static ViewModelLocator _locator;
public static ViewModelLocator Locator => _locator ?? (_locator = new ViewModelLocator());
public App()
{
SimpleIoc.Default.Register<IDataService<Todoo>>(() => new TodoosDataService());
SimpleIoc.Default.Register<IRepository<Todoo>>(() => new FakeTodoosRepository());
var nav = new NavigationService();
nav.Configure(ViewModelLocator.MainPage, typeof(MainPage));
nav.Configure(ViewModelLocator.AddNewTodooPage, typeof(AddNewTodooPage));
SimpleIoc.Default.Register<INavigationService>(() => nav);
var mainPage = new NavigationPage(new MainPage());
nav.Initialize(mainPage);
MainPage = mainPage;
}
public static Page GetMainPage()
{
return new MainPage();
}
public static Page GetAddNewTodooPage()
{
return new AddNewTodooPage();
}
}
Что здесь не так с регистрацией мой ViewModel, что он не может разрешить инъекционные объекты? Когда я запускаю этот код, он терпит неудачу, он работает, когда я добавляю конструктор без параметров, поэтому я предполагаю, что ViewModel не создается должным образом с точки зрения инсталляции конструктора.
Если отсутствует какой-либо важный код, пожалуйста, дайте мне знать, я отправлю его.
T.Hanks заранее для любой обратной связи.
BTW: Как я могу решить этот вопрос? Могу ли я это сделать? –