2017-06-22 79 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上的数据,所以视图知道的在如何获取/处理数据方面尽可能少。