[英]MvvmCross - instantiate ViewModel with activity (context) parameter
[英]MVVMCROSS - Pass a parameter to a ViewModel
我正在嘗試將參數傳遞給引發“ MvvmCross.Platform.Exceptions.MvxException的子ViewModel構造函數:無法構造和初始化ViewModel ... MvxIoCResolveException:無法解析MyType類型的參數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
}
}
在此網站上 ,他們的工作方式是(針對您的情況進行了修改和修改):
public ICommand ShowDialogCommand { get; private set; }
ShowDialogCommand = new MvxCommand<MyType>(ShowMyVM);
private void ShowMyVM(MyType e)
{
if (e != null)
ShowViewModel<SingleClientViewModel>(e);
else
{
//handle case where your parameter is null
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.