【问题标题】:Bindig problems! Bind one page to multiple pages绑定问题!将一页绑定到多页
【发布时间】:2021-11-03 17:30:52
【问题描述】:

伙计们,假设您有 page1.xaml 和 page1.cs,并且此 page1.cs 中有一个类(学校)您想在 page2.xaml 中用作绑定对象。我可以在page2的xaml页面中做到这一点,

1.但是如何在page2.cs中做到这一点?

2.我不想使用 BindingContext = page1;因为我想将多个页面绑定到这个page2。

我可以在 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:

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

在我的 page2.xaml 中:

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

【问题讨论】:

  • 您能否更新您的问题并提供更多信息?你想在页面之间传递对象吗?此外,课程应该在您的页面之外。
  • 是的。我做到了。

标签: xamarin.forms data-binding


【解决方案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);
        }
    }
}

然后在您的 page1.xaml.cs 中:

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

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

然后在你的 page2.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>

【讨论】:

  • 感谢您的回答,但我也想在 page2 中使用其他视图模型。
  • @BehzadChangizi 一个简单的方法是将 viewModel 定义为 Page2 的一个属性,如上所述。
  • @leo-zhu-msft 非常感谢,你只是告诉我我的错误。我在第 1 页中使用了 Sqlite 来保存更新的模型。我没有使用 sql 服务模型或...我将所有 SQL 放在我的第 1 页中。兄弟,如果我按原样使用我的代码,我可以使用:public class YourViewModel 并创建一个 energyx 实例,或者我应该再次编写我的整个 page1 代码.
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 2019-11-09
  • 1970-01-01
  • 2018-06-10
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多