Xamarin表单 - 在页面和视图之间传递数据
问题描述:
我有一个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
}
}
也许不需要绑定上下文,因为我只是传递参数,而不是在视图中更改它们?我想解决方案可以很简单,我不能弄清楚......
答
你缺少的是理解ViewModel的概念,它与视图的关系。在这种情况下,你需要的是一个第3类(视图模型)来处理你的前面2类:
public class HouseViewModel : INotifyPropertyChanged
{
public Flats Flats { get; set; }
private Buildings Buildings { get; set; }
}
而且使用OnBindingContextChanged只是凌乱,并会采取一些性能从您的应用程序..尝试之前准备在VM上的数据,所以视图知道的在如何获取/处理数据方面尽可能少。
你的情况对我来说还不清楚。你能提供一个例子吗?你在哪里使用课程,你有多少页?根据您实际尝试实现的目标,有多种解决方案。 –
你可以通过构造函数,公共属性,公共方法等将数据传递给类/视图 - 有很多方法可以实现它。目前尚不清楚你所遇到的问题。 – Jason