1

この例はベストセラーの例で見つかりました

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 は、int、long、enum、double、string をサポートするようになりました。さらに、 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 URL に設定されたサイズ制限です (これらは非常に小さくなる可能性があります)。

ただし、ほとんどの場合、viewModel-viewModel ナビゲーションはある種のルックアップ キー (persistent-service を使用) を渡すと思います。MvvmCross はナビゲーションに役立ちますが、アプリ開発者はその OS 内の各アプリのライフサイクルを理解する必要があります。

于 2012-11-05T12:16:48.333 に答える