2017-08-30 6 views
1

Xamarin.iOSMvvmCrossに関する質問があります。同じViewModelViewsと異なるiPhoneとiPadのViewを表示するベストプラクティスは何ですか?私は次の例外を取得2 Viewsに同じViewModelを置く場合MvvmCross iPhoneとiPadのベストプラクティス

: ビュー - ViewModelにルックアップテーブルを作成する見

MvvmCross.Platform.Exception.MvxException問題を - あなたは、複数のビューが登録されてい同じのviewmodels

ため が最初から派生して、Viewから依存あれば異なるロジックを実行する別のViewModelを作成するためのベストプラクティスですデバイスはiPhoneまたはiPadですか?

答えて

2

ViewModelの場合はViewを2つ作成できません。 MvvmCrossは、ほかのMVVMライブラリと同様に、リフレクションを使用して、のViewViewModelの関係を作成します。これは1対1の操作です。コンテナ内のViewModelに複数のViewを登録しようとすると、あなたが指摘したようにMvxExceptionが投げられます。

この動作を回避する最も簡単な方法は、最初にViewModelから派生した新しいViewModel(および新しいView)を作成することです。

public class ViewModelA 
{ 
    public ViewModelA() 
    { 
     // Constructor 
    } 

    // Properties, Methods, etc. 

} 

ViewModelAを作成した後、あなたは今、元から派生し、新しいもの、ViewModelBを作成することができます。

public class ViewModelB : ViewModelA 
{ 
    public ViewModelA() : base() { } 
} 
1

あなたが欲しいとき、MvvmCrossから、あなたに提供されMvxFormFactorSpecific属性を使用する必要がありますがiPadとiPhoneを1つの視点でターゲット設定するモデルを作成する

[MvxFormFactorSpecific(MvxTouchFormFactor.TallPhone)] 
    public class ForTallController : MainController { 


     public override void ViewDidLoad() { 
      base.ViewDidLoad(); 
     } 
........ 
........ 


    } 
     [MvxFormFactorSpecific(MvxTouchFormFactor.Pad)] 
    public class ForiPadController : MainController { 

     public override void ViewDidLoad() { 
      base.ViewDidLoad(); 

     } 
........ 
........ 
    } 

    [MvxFormFactorSpecific(MvxTouchFormFactor.Phone)] 
     public partial class MainController : MvxViewController { 


      public MainController() 
       : base("MainController", null) { 

      } 

    ...... 
    ...... 
    } 
関連する問題