我正在尝试将参数传递给子 ViewModel 构造函数,该构造函数抛出“MvvmCross.Platform.Exceptions.MvxException:无法构造和初始化 ViewModel ... MvxIoCResolveException:无法解析类型为 MyParam 的参数 myParam 的参数... "
MyChildViewModel.cs
public class MyChildViewModel : MvxViewModel
{
private MyType _myParam;
public MyType MyParam
{
get { return _myParam; }
set
{
if (SetProperty(ref _myParam, value))
{
RaisePropertyChanged(() => MyParam);
}
}
}
public MyChildViewModel(MyType myParam)
{
_myParam = myParam;
}
}
在我的父 ViewModel 中,我有:
public ICommand ShowDialogCommand { get; private set; }
ShowDialogCommand = new MvxCommand<MyType>(e => ShowViewModel<MyChildViewModel>(e));
家长事件电话:
ViewModel.ShowDialogCommand.Execute(VarOfMyType);
我显然做错了什么。这种将数据传递给子 ViewModel 的方法甚至是可以接受的吗?最佳做法是什么?
预先感谢您抽出宝贵的时间。
最佳答案
如果您阅读了文档 使用 MvxNavigationService 很容易传递对象:https://www.mvvmcross.com/documentation/fundamentals/navigation
请注意,该文档适用于目前每晚发布的 MvvmCross 5.2,但几乎同样适用于 5.0 及更高版本。
在您的 ViewModel 中,这可能看起来像:
public class MyViewModel : MvxViewModel
{
private readonly IMvxNavigationService _navigationService;
public MyViewModel(IMvxNavigationService navigationService)
{
_navigationService = navigationService;
}
public override void Prepare()
{
//Do anything before navigating to the view
}
public async Task SomeMethod()
{
await _navigationService.Navigate<NextViewModel, MyObject>(new MyObject());
}
}
public class NextViewModel : MvxViewModel<MyObject>
{
public override void Prepare(MyObject parameter)
{
//Do anything before navigating to the view
//Save the parameter to a property if you want to use it later
}
public override async Task Initialize()
{
//Do heavy work and data loading here
}
}
关于c# - MVVMCROSS - 将参数传递给 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929520/