簡體   English   中英

MVVMCROSS-將參數傳遞給ViewModel

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM