1

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

 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));
            }
        }
    }

现在,这个 ViewModel 具有实现了 getter 和 setter 方法的属性,这些方法正在获取价值。我在这段代码中的逻辑是从列表中设置选定项的值并获取选定人员数据的对象。并在标签页上访问该人的数据以在个人资料中显示。

下面 id tabbed-page.cs

 public partial class ProfilePage : TabbedPage
{
    public ProfilePage()
    {


        InitializeComponent();
    }

    public ProfilePage(StudentsViewModel mainViewModel)
    {
        InitializeComponent();
        BindingContext = mainViewModel;
    }


}

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

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

在此先感谢,如果您不知道或者您是我想在这里讨论的内容,请告诉我。

4

1 回答 1

1

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

最直接的方法是为标签页创建一个模型,其中包含三个子页面的模型。

为标签页的子页命名,使其在代码隐藏中可访问,然后在标签页的构造函数中,将子页的绑定上下文设置为相应的模型:

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;
    }
}

尽管我在上面的伪代码中省略了它,但请确保您的主模型(以及子模型)实现 INotifyPropertyChanged。

于 2018-06-11T15:19:09.083 回答