如何在 xamarin MVVM 中将数据从 content-page.cs 发送到 tabbed-page.cs?
how to send data from content-page.cs to tabbed-page.cs in xamarin MVVM?
我正在开发 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-page.cs
public partial class ProfilePage : TabbedPage
{
public ProfilePage()
{
InitializeComponent();
}
public ProfilePage(StudentsViewModel mainViewModel)
{
InitializeComponent();
BindingContext = mainViewModel;
}
}
如果您看到在将视图模型(具有 属性 以设置对象值)传递给参数时通过将其设置为绑定上下文并在其他内容上访问它来获取所选项目值是可能的通过将参数值设置为与传递的视图模型相同来捕获页面。
这里,我的问题是,当我使用内容页到标签页而不是内容页到内容页时,如何实现相同的技术。
提前致谢,
如果您不知道或者您就是我想在这里讨论的内容,请告诉我。
基本上您的标签页包含三个内容页面(假设您有三个标签页)。
最直接的方法是为选项卡式页面创建一个模型,其中包含三个子页面的模型。
为选项卡页面的子页面命名,使其在代码隐藏中可访问,然后在选项卡页面的构造函数中,将子页面的绑定上下文设置为相应的模型:
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。
我正在开发 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-page.cs
public partial class ProfilePage : TabbedPage
{
public ProfilePage()
{
InitializeComponent();
}
public ProfilePage(StudentsViewModel mainViewModel)
{
InitializeComponent();
BindingContext = mainViewModel;
}
}
如果您看到在将视图模型(具有 属性 以设置对象值)传递给参数时通过将其设置为绑定上下文并在其他内容上访问它来获取所选项目值是可能的通过将参数值设置为与传递的视图模型相同来捕获页面。
这里,我的问题是,当我使用内容页到标签页而不是内容页到内容页时,如何实现相同的技术。
提前致谢, 如果您不知道或者您就是我想在这里讨论的内容,请告诉我。
基本上您的标签页包含三个内容页面(假设您有三个标签页)。
最直接的方法是为选项卡式页面创建一个模型,其中包含三个子页面的模型。
为选项卡页面的子页面命名,使其在代码隐藏中可访问,然后在选项卡页面的构造函数中,将子页面的绑定上下文设置为相应的模型:
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。