c# - MVVMCROSS - 将参数传递给 ViewModel

标签 c# xamarin mvvmcross

我正在尝试将参数传递给子 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/

相关文章:

android - RecycleView 回收无法正常工作

使用 List.AddRange() 的 C# Void 到 List 类型转换错误

android - 使用 MVVMCross 在 Android 中进行 fragment 转换

c# - 如何在新的EXCEL表中写入数据

c# - 继承一个已经实例化的基础对象

c# - ItemClick on xamarin for android 中的 ListView

c# - 找不到 fragment.inflate 的类

android - 在 MvvmCross 3.5.1 中实现 fragment 的正确方法是什么

c# - WIC/WPF : System. GPS.Longitude 和 System.GPS.Latitude 总是返回 NULL(通过 BitmapMetadata)

c# - 如何控制 MVVM WinRT/XAML Windows Store 应用程序中 ListView 的滚动位置?