Xamarin表单 - 在页面和页面之间传递数据意见

时间:2017-06-22 11:26:33

标签: xamarin.forms binding-context

我有一个xamarin表单应用程序。 有2个类有数据,其中一个页面正在填充数据。

问题是:我正在创建新视图,应该使用两个类中的数据。

我熟悉的唯一方法是将一个类设置为bindingContext以在页面之间传递数据,并且它与 ONE 类一起正常工作,因为显然不可能同时2 bindingContext

实施例

第1课(所有课程都填写在上一页。只是接受他们已经填写)

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
        }
    }

也许不需要绑定上下文,因为我只是传递参数,而不是在视图中更改它们?我想解决方案可以非常简单,我无法弄清楚....

1 个答案:

答案 0 :(得分:2)

你缺少的是理解ViewModel的概念,以及它与视图的关系。在这种情况下,你需要的是一个处理前2个类的第3类(ViewModel):

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

同样使用OnBindingContextChanged只是杂乱而且会从你的应用程序中获得一些性能..尝试在你的VM之前准备你的数据,所以视图尽可能少地知道如何获取/处理数据。