Как отправить данные из content-page.cs в tabbed-page.cs в 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, который получает значение. Моя логика в этом коде состоит в том, чтобы установить значение selecteditem из списка и получить объект данных выбранного человека. и получить доступ к данным этого человека на вкладке страницы, чтобы показать их в профиле.

Ниже id tabbed-page.cs

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


        InitializeComponent();
    }

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


}

если вы видите, что можно получить значение выбранного элемента, когда вы передаете свою модель представления (у которой есть свойство для установки значения объекта) в параметры, настроив ее как контекст привязки и получив доступ к ней на другой странице содержимого, перехватив ее, установив значение параметра как такой же, как пройденный вид-модель.

Здесь мой вопрос заключается в том, как я могу добиться того же метода, когда я использую страницу контента для страницы с вкладками вместо страницы контента на страницу контента.

Спасибо заранее, пожалуйста, дайте мне знать, если у вас нет идеи или вы хотите обсудить здесь.

1 ответ

Решение

В основном ваша страница с вкладками содержит три страницы содержимого (предположим, у вас есть три вкладки).

Самый простой способ - создать модель для вашей страницы с вкладками, которая содержит модели для трех подстраниц.

Дайте подстраницам имена страниц с вкладками, чтобы сделать их доступными в 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;
    }
}

Несмотря на то, что я пропустил его в псевдокоде выше, убедитесь, что ваша основная модель (а также подмодели) реализуют INotifyPropertyChanged.

Другие вопросы по тегам