2017-06-22 113 views
0

我有一個Xamarin表單應用程序。 有兩類數據,其中一個頁面正在填充數據。Xamarin表單 - 在頁面和視圖之間傳遞數據

問題是:我正在創建新的視圖,應該使用這兩個類的數據。

我熟悉的唯一方法是設置一個類作爲bindingContext通過頁面之間的數據,它的正常工作與ONE類,因爲顯然也就不會在同一時間被2 bindingContext

例:

第一類(所有的類都充滿前頁只是接受他們充滿。)

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")); 
      } 
     } 
} 

二等

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的概念,它與視圖的關係。在這種情況下,你需要的是一個第3類(視圖模型)來處理你的前面2類:

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

而且使用OnBindingContextChanged只是凌亂,並會採取一些性能從您的應用程序..嘗試之前準備在VM上的數據,所以視圖知道的在如何獲取/處理數據方面儘可能少。