正如标题所示,我在Xamarin.Forms下的MvvmLight应用程序有问题。 我有我的示例性ViewModel的代码。
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提前获得任何反馈。
答案 0 :(得分:0)
我刚解决了这个问题。我几乎做错了什么,但现在它运作良好。如果有人对这应该如何正确感兴趣(我猜...)我可以发布这个问题的工作代码。