2017-06-20 15 views
-1

私のviewmodelAでは、私のfragmentA.axmlのボタンをクリックすると、Mvxbindを行い、画面が変更され、viewmodelBが表示され、httpリクエストを送信するというプロパティがあります。期待どおりの応答を得る。これは私がそれが働く方法を正確に動作します。しかし、問題は、私は私のfragmentB.axmlページ(someNumberとステータス)でその応答を示すように見えることです。誰もこの問題で私を助けることができます。ありがとう!!MvvmCross - MvxBindは正しくバインドされていません

ViewmodelA.cs:

public MvxCommand SomeCommand 
    { 
     get 
     { 
      return new MvxCommand(() => something()); 
     } 
    } 
    public async void something() 
    { 
     ShowViewModel<ViewModelB>(); 

     SomeService serviceWrapper = new SomeService(); 
     var model = {//Some Json request}; 
     var result = await serviceWrapper.SubmitRequestAsync(model); 
     SomeResponse response = StaticMethods.DeserializeJson<SomeResponse>(result); 

     Status = response.SomeResponse1.Activity[0].Status.Description; 
     SomeNumber = response.SomeResponse1.SomeNumber; 

     Debug.WriteLine("SomeNumber : " + SomeNumber); 
     Debug.WriteLine("Status: " + Status); 

    } 

    private string _someNumber; 
    public string SomeNumber 
    { 
     get 
     { 
      return _someNumber; 
     } 

     set 
     { 
      SetProperty(ref _someNumber, value); 
      RaisePropertyChanged(() => SomeNumber); 
     } 
    } 

    private string _status; 
    public string Status 
    { 
     get 
     { 
      return _status; 
     } 

     set 
     { 
      SetProperty(ref _status, value); 
      RaisePropertyChanged(() => Status); 
     } 
    } 

fragmentA.axml

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Submit" 
    android:id="@+id/Submit" 
    local:MvxBind="Click SomeCommand" /> 

fragmentB.axml

限り、私はあなたが行く見ることができるよう
<TextView 
    android:text="Some Number:" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/SomeNum" 
    local:MvxBind="Text SomeNumber "/> 
<TextView 
    android:text="Status:" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/status" 
    local:MvxBind="Text Status"/> 
+0

あなたのクラスは定義されていますか:INotifyPropertyChanged?あなたはクラス定義を提供していません –

+1

私はちょっと混乱しています。ViewModelBにナビゲートしようとしているようですが、ビューに表示するプロパティはViewModelAにありますか? – Ulbo

+0

@Ulboあなたが言っていることを見るが、ボタンをクリックするとhttpリクエストを送信したい。しかし、私の問題は、別のビューモデルのフラグメント(つまり、フラグメントB)にそのデータを表示する方法がわかりません。この問題にどう対処するか分かっている場合は、私に知らせてください。ありがとう –

答えて

0

2つのオプション:

最初のオプションは、ViewModelBに入るまでhttpコールを送信し、そこにデータをロードすることです。

第2のオプションは、ナビゲートする前にhttpコールが終了するまで待機し、ViewModelAでフェッチされたデータをViewModelBのナビゲーションパラメータとして送信することです。

+0

2番目のオプションは、どのようにViewModelAでデータを送信できますか。あなたは例を挙げることができますか? –

+1

スチュアートは、ビューモデル間でパラメータを渡す方法について素晴らしい答えを与えました。 https://stackoverflow.com/questions/19058173/passing-complex-navigation-parameters-with-mvvmcross-showviewmodel – Ulbo

+1

パラメーターを渡すことについての公式文書を参照してください:https://www.mvvmcross .com/documentation/fundamentals/navigation – Martijn00

1

MvvmCrossは、ViewModelからn Viewsまで1つのビューを実行しません。 1対1の関係のみが許可されます。

問題にはさまざまな対応方法があります。

1. ShowViewModelまたはICommandからの結果を記述する新しいNavigationServiceのオブジェクトを渡します。これが機能するために、あなたはあなたの要求が完了するまでナビゲートするまで待機する必要があります。ViewModelBで次に

var result = await GetSomeData(); 
ShowViewModel<ViewModelB>(new { status = Status, number = SomeNumber }); 

public void Init(string status, string number) 
{ 
    Status = status; 
    Number = number; 
} 

を次に、そのViewModelにでステータスと数の小道具を持っています。

2. あなたのviewmodels間で共有するサービスを持っており、それが状態を維持し、あなたの残りの世話を持っている呼び出し:

public class MyService : IMyService 
{ 
    public string Status {get; set;} 
    public string Number {get; set;} 

    public async Task DoStuff() 
    { 
    } 
} 

次にViewModelA CTORで次のようになります。

public ViewModelA(IMyService service) 

あなたのコマンドで:

public async void something() 
{ 
    await _service.DoSomething(); 
    ShowViewModel<ViewModelB>(); 
} 

ViewModelBのCtorは似ていますViewModelAに、ちょうど何でも小道具を移入や小道具が直接のようなサービスであるものを反映してい:

public string Status => _service.Status; 

これらは、この問題を解決するためのちょうど2つの方法があります。

関連する問題