Xamarin формы - передача данных между страницами и представлениями

У меня есть приложение формы xamarin. Есть 2 класса с данными, одна из страниц заполняет данные.

Проблема в том, что я создаю новое представление, которое должно использовать данные из обоих классов.

Единственный способ, которым я знаком, - это установить класс как bindingContext передавать данные между страницами, и это нормально работает с одним классом, потому что, очевидно, не может быть 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"));
            }
        }
}

2-й класс

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

Может быть, нет необходимости связывать контекст, потому что я просто передаю параметры, а не изменяю их в представлении? Я думаю, что решение может быть довольно простым, и я не могу понять это....

2 ответа

Решение

Чего вам не хватает, так это понимания концепции ViewModel и ее связи с представлениями. В данном случае вам нужен третий класс (ViewModel), который обрабатывает ваш 2 предыдущих класса:

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

Кроме того, использование OnBindingContextChanged просто беспорядочно и отнимет у вашего приложения некоторую производительность. Попробуйте подготовить ваши данные раньше на вашей виртуальной машине, чтобы представление как можно меньше узнало, как получать / обрабатывать данные.

Существует простой способ передачи данных между страницами в формах 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... и т. д.).

Другие вопросы по тегам