我正在开发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方法的属性,它正在获得价值。我在这段代码中的逻辑是从列表中设置selecteditem的值并获取所选人员数据的对象。并在选项卡页面上访问该人员的数据,以便在个人资料中显示。
在id tabbed-page.cs下面
public partial class ProfilePage : TabbedPage
{
public ProfilePage()
{
InitializeComponent();
}
public ProfilePage(StudentsViewModel mainViewModel)
{
InitializeComponent();
BindingContext = mainViewModel;
}
}
如果通过将视图模型(具有设置对象值的属性)传递给参数,通过将其设置为绑定上下文并通过设置捕获它在另一个内容页面上访问它,可以看到可以获取所选项目值参数值与传递的视图模型相同。
在这里,我的问题是当我使用内容页面到标签页而不是内容页面到内容页面时,我如何实现相同的技术。
提前致谢, 如果你没有想法,请告诉我,或者你想知道我想在这里讨论什么。
答案 0 :(得分: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。