绑定问题!将一页绑定到多页

Posted

技术标签:

【中文标题】绑定问题!将一页绑定到多页【英文标题】: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/>

【问题讨论】:

您能否更新您的问题并提供更多信息?你想在页面之间传递对象吗?此外,课程应该在您的页面之外。 是的。我做到了。 【参考方案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 代码.

以上是关于绑定问题!将一页绑定到多页的主要内容,如果未能解决你的问题,请参考以下文章

如何将一系列日期绑定值映射/减少到 JavaScript / RXJS 中的运行总数?

使用 JFace 数据绑定绑定单选按钮组的正确方法

DataReader 或 DataTable 绑定Repeater?

简单的 WPF 单选按钮绑定?

Gridview动态绑定数据 分页问题(换页后,显示没有数据)?

是否可以“刷新”WPF 数据绑定