Проблемы с привязкой! Привязка одной страницы к нескольким страницам

#xamarin.forms #data-binding

Вопрос:

ребята, допустим, у вас есть page1.xaml и page1.cs, и в этой page1.cs есть класс (школа), который вы хотите использовать в page2.xaml в качестве объекта привязки. Я могу сделать это на странице xaml страницы 2,

1.Но как я могу это сделать на странице 2.cs?

2.Я не хочу использовать BindingContext = страница 1; потому что я хочу привязать несколько страниц к этой странице2.

Могу ли я использовать множественную привязку на странице xaml или что мне следует делать?

это моя модель:

 public class EnergyX
    {
        [PrimaryKey, AutoIncrement]

        public int Id { get; set; }
        public string Score { get; set; }

    }
 

и в моей page1.cs я использовал SQL для сохранения пользовательского ввода:

 private ObservableCollection<EnergyX> _energyX;
        public ObservableCollection<EnergyX> energyX
        {
            get { return _energyX; }
            set
            {
                _energyX = value;
                OnPropertyChanged("energyX");
            }
        }
 

сохраните эту энергию с помощью SQL:

 energyX = new ObservableCollection<EnergyX>(conn.Table<EnergyX>().ToList());
 

На моей странице 2.xaml:

 <listview {binding energyx}/>
<lable {binding Score}/>
 

Комментарии:

1. Можете ли вы обновить свой вопрос дополнительной информацией, пожалуйста? Вы хотите передавать объекты между страницами? Кроме того, занятия должны находиться за пределами вашей страницы.

2. Да, конечно. я сделал.

Ответ №1:

Вы можете определить свою модель представления как одноэлементную,а затем связать ее на нескольких страницах.

Нравится:

 public  class YourViewModel
{

    public static YourViewModel viewModel;
    public ObservableCollection<EnergyX> energyX { get; set; } = new ObservableCollection<EnergyX>();

    public static YourViewModel instance()
    {
        if (viewModel == null)
        {
            viewModel = new YourViewModel();
        }
        return viewModel;
    }

    public void Save(List<EnergyX> list)
    {

        foreach (var item in list)
        {
            energyX.Add(item);
        }
    }
}
 

затем на вашей странице 1.xaml.cs:

     public Page1()
    {
        InitializeComponent();
        BindingContext = YourViewModel.instance();
    }

    //when you want to save the energyx 
    List<EnergyX> energyx  = xxxx;
    YourViewModel.instance().Save(energyx);
 

затем на вашей странице 2.xaml.cs:

     public Page2()
    {
        InitializeComponent();
        BindingContext = YourViewModel.instance();
    }
 

привязка в page2.xaml:

     <listview {binding energyx}/>
    <lable {binding Score}/>
 

Обновить:

 public partial class Page2 : ContentPage
{
    public ViewModel1 viewModel1 { get; set; }
    public ViewModel2 viewModel2 { get; set; }
    public Page2()
    {
        InitializeComponent();
        viewModel1 = new ViewModel1();
        viewModel2 = new ViewModel2();
        BindingContext = this;
    }
 }
 

затем вы могли бы связать две модели представления в своем xaml:

  <Label Text="{Binding viewModel1.Name}"></Label>
 <Label Text="{Binding viewModel2.Id}"></Label>
 

Комментарии:

1. спасибо за ваш ответ, но я хочу использовать и другие модели представлений на странице 2.

2. @BehzadChangizi Простой способ сделать это-определить ViewModel как свойство страницы 2, как указано выше.

3. @leo-zhu-msft Большое тебе спасибо, ты просто покажи мне мою ошибку. Я использовал Sqlite на своей странице 1, чтобы сохранить обновленную модель. Я не использовал модель службы sql или … Я поместил весь SQL на свою страницу 1. Братан, если я использую свой код как есть, могу ли я использовать : общедоступный класс YourViewModel и создать экземпляр energyx или мне следует написать весь код страницы 1 заново.