4

(信じられないほど優れた) MVVMCross を使用した最初のプロジェクトに取り掛かったところですが、かなり基本的なこと、つまり複合ビューを行う方法がわかりません。

私がPerson(FirstName、LastName など) を持っていて、ある人がAddress(Street、City、PostalCode など) を持っているとします。だから私も持っていますPersonViewModelAddressViewModel.

これは厳密にタブレット ベースのアプリ (実際には iPad のみ) であり、外側 (人) ビューが にバインドされ、内側 (アドレス) ビューが にバインドされるようPersonViewに、 (再利用可能な)を含むように封じ込めを使用したいと考えています。AddressViewPersonPerson.Address

hereで説明されているように、ビューを表示するためのプレゼンターの概念を (ぼんやりと) 理解していますが、Person から Address へ、およびその逆の変更の伝播を処理する方法がわかりません。

Person オブジェクトに Address オブジェクトが含まれているとします。ただし、何らかの種類の Address ID を渡して復元することにより、AddressView に がPersonViewModel表示されます。次に、AddressView は、Person に含まれているものとは異なるAddressViewModelAddress オブジェクトにバインドされています。もちろん、バインディングの目的全体を無効にする2つの同期を維持する方法がわかりません。

自分がやろうとしていることをどうすればいいですか?

4

3 に答える 3

12

これは本当に幅広いトピックです...

...そして、可能な答えはたくさんあります。

ViewModel を非常に単純な概念として考えることが重要だと思います。ViewModel を単にビューのモデルとして考えることをお勧めします。「ページ全体」のオブジェクトとは絶対に考えないでください。

....

MvvmCross 内では、必要に応じShowViewModelてカスタム プレゼンターを使用して UI を変更できます。これは、分割ビュー プレゼンターを含むいくつかの MvvmCross の例で示されています - http://slodge.blogspot.com/2013/05/n24-splitviewpresenter- n1-days-of.html

この手法は、ページ全体またはその重要な部分を変更するShowViewModel場合に非常に役立ちます。navigation

ただし、アプリで必要ない場合は、ナビゲーション パラダイムを使用する必要はありません。

必要に応じて、代わりに次のことができます。

  • コア内にビューモデルの独自の階層を構築する
  • その後、UI 内で独自のデータバインドされたビューの階層を構築できます。

それは完全にあなた次第です -あなたのアプリは王様です。

....

上手く説明できてない気がする…

....

だから私はあきらめて、このビデオを記録しました - 多分それは役立つでしょう: http://slodge.blogspot.co.uk/2013/06/n32-truth-about-viewmodels-starring.html

ビデオとサンプル コードは iPad のみを対象としていますが、他のプラットフォームにどのように拡張するかが簡単にわかることを願っています。

  • Windowsの場合、使用できますUserControl
  • Android の場合はMvxFrameControl、カスタム ビューまたはFragmentコードを使用できます。
于 2013-06-28T16:11:19.673 に答える
0

MvvmCross プロジェクト用のカスタム プレゼンターのこの実装を確認してください。Android でフラグメントをサポートし、複数のフラグメントを別のフラグメント/アクティビティにサポートするには:

https://github.com/JelleDamen/CustomMvxAndroidPresenter

于 2014-02-12T10:16:25.677 に答える