将参数传递给mvvmcross viewmodels时出错

时间:2012-11-05 10:48:45

标签: c# mvvmcross

我在Bestseller exmaple中找到了这个例子

public ICommand ViewDetailCommand
{
    get { return new MvxRelayCommand(() => RequestNavigate<BookViewModel>(new { category= CategoryEncoded, book=ISBN })); }
}

public BookViewModel(string category = null, string book = null)
{
    category = category ?? string.Empty;
    book = book ?? string.Empty;

    AsyncFindBook(category, book);
 }

所以我尝试过做

public IMvxCommand GetGpsCommand
{
    get
    {
        return new MvxRelayCommand<SetupViewModel>(type => RequestNavigate<GpsViewModel>(new {installedMeter = _installedMeter}));
    }
}

public GpsViewModel(InstalledMeter installedMeter = null)
{
    _installedMeter = installedMeter;

    Latitude = 0.0;
    Longitude = 0.0;
    ButtonStartReading = "Start";

    this.GetService<IGpsService>().CoordinatesFoundEvent += CoordinatesFound;
    //this.GetService<IGpsService>().StartReading();
}

但是当我尝试这个时,我就得到了

  

Cirrious.MvvmCross.Exceptions.MvxException:无法加载ViewModel   从定位器中键入Core.ViewModels.InstallUnit.GpsViewModel   MvxDefaultVi ...

1 个答案:

答案 0 :(得分:2)

更新:此答案不再是MvvmCross的最新答案

MvvmCross现在支持整数,长整数,枚举,双精度和字符串。此外,您可以使用以下建议通过您自己的可序列化类型进行导航:http://slodge.blogspot.co.uk/2013/01/navigating-between-viewmodels-by-more.html


原始回答:


这是经常遇到的错误。

  

MvvmCross导航参数必须是字符串

原因是导航本身需要序列化为WP7 / 8上的Xaml Url和Android上的Intent。

有关详细信息,请参阅:

有关更频繁的导航问题,请查看导航部分:http://slodge.blogspot.co.uk/p/mvvmcross-quicklist.html

如果您认为应支持更多类型,则会有一个未解决的问题 - https://github.com/slodge/MvvmCross/issues/45


对于小型纯数据对象,您可以将它们序列化为文本并通过此构造函数机制传递它们。唯一的限制是Xaml Urls上的大小限制(这些限制可能非常小)。

但是,对于大多数情况,我希望viewModel-viewModel导航将传递某种查找键 - 用于持久服务。 MvvmCross可以帮助进行导航,但是应用程序开发人员需要了解其操作系统中每个应用程序的生命周期。