1

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

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

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

例子:

1st class(所有班级都在上一页填写。接受他们已填写)

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

也许不需要绑定上下文,因为我只是传递参数,而不是在视图中更改它们?我想解决方案可能很简单,我想不通....

4

2 回答 2

2

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

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

使用 OnBindingContextChanged 也很麻烦,并且会从您的应用程序中获取一些性能.. 尝试在您的 VM 上准备您的数据,因此视图尽可能少地知道如何获取/处理数据。

于 2017-06-23T09:45:51.727 回答
0

有一种简单的方法可以在 Xamarin 表单中的页面之间传输数据。

  1. 将新类添加到名为的主项目Transporter.cs中,这个类应该是static
  2. 在这个类里面,添加其他页面之间传输数据的变量;然后您可以使用 . 简单地访问任何变量Transporter.Variable

例子:

public static Transporter
{
public static string x;
}

> 现在,在每个页面中,您可以简单地访问(设置或获取)值:

Transporter.x=MyName.Text;

>在另一页:

MySecondName.Text=Transporter.x;

注意:MyName是第一页MySecondName的输入字段,第二页是输入字段。

此外,您可以定义任何类型的变量,例如(Lists、int、object...等)。

于 2021-11-23T20:04:01.103 回答