2017-06-22 12 views
0

私はxamarinフォームアプリケーションを持っています。 データを持つ2つのクラスがあり、ページの1つがデータを埋めています。Xamarinフォーム - ページとビュー間でデータを渡す

問題は次のとおりです。両方のクラスのデータを使用する新しいビューを作成しています。

私がよく知っている唯一の方法は、明らかに、同時に2 bindingContextができなかったため、ページ間でデータを渡すためにbindingContextとしてクラスを設定し、それがONEクラスで罰金働いています。

例:

ファーストクラス(すべてのクラスは、前のページで満たされているだけで、彼らが満たされていることを受け入れる。)

public class Buildings : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     private string _id; 

     public string Id 
     { 
      get { return _id; } 
      set 
      { 
       _id = value; 
       PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Id")); 
      } 
     } 
} 

2級

public class Flats : INotifyPropertyChanged 
     { 
      public event PropertyChangedEventHandler PropertyChanged; 

      private string _num; 

      public string Num 
      { 
       get { return _num; } 
       set 
       { 
        _num = value; 
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Num")); 
       } 
      } 
    } 

新しいビュー:

public partial class HouseView 
    { 
     private Flats _flats; 
     private Buildings _buildings; 
     public HouseView() 
     { 
      InitializeComponent(); 
     } 

     private void HouseView_OnBindingContextChanged(object sender, EventArgs e) 
     { 
      var building = BindingContext as Building; 
      //var flat = BindingContext as Flat; 
      //_flat = flat; 
      _building = building; 
      var buildingInfo = await Rest.GetHouseInfo(_building.Id, _flat.Num); //function that will return info on a current house; 
      // rest code 
     } 
    } 

私はパラメータを渡しているだけなので、ビューでバインディングコンテキストをバインドする必要はないでしょうか?私は解決策がかなりシンプルにできると思います。私はそれを把握できません....

+0

あなたの状況はわかりません。あなたは例を挙げることができますか?どこでクラスを使用しますか、いくつのページがありますか?実際に何を達成しようとしているかによって、複数の解決策があります。 –

+0

コンストラクタ、パブリックプロパティ、パブリックメソッドなどを介してクラス/ビューにデータを渡すことができます。これにはさまざまな方法があります。あなたが持っている問題が何であるかははっきりしていません。 – Jason

答えて

1

あなたが欠けているのは、ViewModelの概念を理解することです。この場合、ビューとの関係です。あなたの2つの以前のクラスを扱う第三クラス(ViewModelに):

public class HouseViewModel : INotifyPropertyChanged 
{ 
    public Flats Flats { get; set; } 
    private Buildings Buildings { get; set; }  
} 

またOnBindingContextChangedは単なる厄介で、ビューのように知っているので、あなたのVM上の前に、あなたのデータを準備しよう...あなたのアプリからいくつかのパフォーマンスがかかります使用してできるだけデータを取得/処理する方法はほとんどありません。

関連する問題