代码之家  ›  专栏  ›  技术社区  ›  Tirth21896

如何将数据从content-page.cs发送到xamarin mvvm中的选项卡式page.cs?

  •  1
  • Tirth21896  · 技术社区  · 6 年前

    我正在开发XamarinPCL表单应用程序,我试图将数据从内容页发送到标签页。这里我有下面的内容页代码

     private async void StudentList_ItemTapped(object sender, ItemTappedEventArgs e)
        {
            var student = StudentList.SelectedItem as Students;
            if (student != null) {
                var mainViewModel = BindingContext as StudentsViewModel;
    
                if (mainViewModel != null) {
                    mainViewModel.SelectedStudent = student;
    
                    await Navigation.PushAsync(new ProfilePage(mainViewModel));
                }
            }
        }
    

    现在,这个视图模型有一个属性,该属性实现了getter和setter方法,该方法获取值。我在这段代码中的逻辑是从列表中设置selecteditem的值,并获取所选人员数据的对象。并在选项卡页上访问此人的数据以在配置文件中显示。

    ID标签页下.cs

     public partial class ProfilePage : TabbedPage
    {
        public ProfilePage()
        {
    
    
            InitializeComponent();
        }
    
        public ProfilePage(StudentsViewModel mainViewModel)
        {
            InitializeComponent();
            BindingContext = mainViewModel;
        }
    
    
    }
    

    如果您看到在将视图模型(具有设置对象值的属性)传递给参数时,通过将其设置为绑定上下文,以及通过将参数值设置为与传递的视图模型相同的方式在另一个内容页上访问它,可以获取所选项值。

    在这里,我的问题是,当我使用内容页而不是内容页到内容页时,如何实现相同的技术。

    事先谢谢, 如果你不知道或者你是我想在这里讨论的,请告诉我。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Markus Michel    6 年前

    基本上,你的标签页包含三个内容页(假设你有三个标签页)。

    最简单的方法是为选项卡式页面创建一个模型,其中包含三个子页面的模型。

    给出选项卡页名称的子页,使其在codebehind中可访问,然后在选项卡页的构造函数中,将子页的绑定上下文设置为相应的模型:

    public TabPageModel
    {
        public Page1Model ModelPg1 {get;set;}
        public Page2Model ModelPg2 {get;set;}
        public Page3Model ModelPg3 {get;set;}
    }
    
    public partial class MyTabbedPage : TabbedPage
    {
        public MyTabbedPage()
        {
            InitializeComponent();
        }
    
        public MyTabbedPage(TabPageModel model) : this()
        {
            this.SubPage1.BindingContext = model.ModelPg1;
            this.SubPage2.BindingContext = model.ModelPg2;
            this.SubPage3.BindingContext = model.ModelPg3;
        }
    }
    

    即使我在上面的伪代码中省略了它,也要确保您的主模型(以及子模型)实现inotifypropertieschanged。

    推荐文章