【问题标题】:Error passing parameters to mvvmcross viewmodels将参数传递给 mvvmcross 视图模型时出错
【发布时间】:2012-11-05 10:48:44
【问题描述】:

我在 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:无法加载 ViewModel 对于定位器中的 Core.ViewModels.InstallUnit.GpsViewModel 类型 MvxDefaultVi…

【问题讨论】:

    标签: c# mvvmcross


    【解决方案1】:

    更新:这个答案对于 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 可以帮助导航,但应用开发者需要了解每个应用在其操作系统中的生命周期。

    【讨论】:

    • 将我要传递的对象序列化然后发送它是否明智?
    • 基本上 - 是的,你可以,但对于我编写的大多数应用程序来说,情况并非如此。答案更新了进一步的评论。另见gregshackles.com/2012/11/…
    • 有什么地方可以在 MvvmCross 中放置几个​​不同 ViewModel 之间共享的对象实例?或者我是否必须使用 IoC 将其解析到每个实例,不想达到这些大小限制。
    • 评论太难讨论新问题。试试看?还是把一个更长的新问题放在一起?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多