#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 заново.