1

我在 Bestseller 示例中找到了这个示例

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:无法从定位器 MvxDefaultVi 加载 Core.ViewModels.InstallUnit.GpsViewModel 类型的 ViewModel…</p>

4

1 回答 1

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 可以帮助导航,但应用程序开发人员需要了解每个应用程序在其操作系统中的生命周期。

于 2012-11-05T12:16:48.333 回答