Как отправить данные из content-page.cs в tabbed-page.cs в xamarin MVVM? - PullRequest
0 голосов
/ 11 июня 2018

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

Ниже id tabbed-page.cs

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


        InitializeComponent();
    }

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


}

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

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

Заранее спасибо, пожалуйста, дайте мне знать, если выЯ не имею ни малейшего представления, или вы хотите обсудить это здесь.

1 Ответ

0 голосов
/ 11 июня 2018

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

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

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

...