public string Name { get; set; }
public ClassPageViewModel()
{
MessagingCenter.Subscribe<MainPage, ClassListModel>(this, "ClassDetails", (sender, arg) =>
{
Name = arg.Name;
//first line
Console.WriteLine(Name); //This outputs what I sent
});
//second line
Console.WriteLine(Name); //This outputs a null value
}
Думаю, вы сначала поймете, когда будут напечатаны эти две строки.
Код первой строки будет выполняться, когда вы отправляете ClassDetails
сообщение от MessagingCenter
.
Код второй строки будет выполнен, когда вы создадите новый экземпляр ClassPageViewModel
.
Итак, возвращаясь к вашему вопросу:
вне метода MessagingCenter.Subscribe, изменение не отражается, и свойство остается на нулевом значении.
В это время вы просто создаете новый экземпляр ClassPageViewModel
, поэтому вы получаете null из кода второй строки.
Вторая строка записи запускается дважды.
Это должно быть вызвано тем, что вы создали два экземпляра ClassPageViewModel
.
, тогда как мне сохранить обе страницы используя тот же экземпляр
Есть много способов добиться этого. Вот что я рекомендую вам сделать:
В классе App создайте свойство stati c с именем classPageVM
и настройте classPageVM
там:
public partial class App : Application
{
public static ClassPageViewModel classPageVM { get; set; }
public App()
{
InitializeComponent();
//custom your classPageVM herer
classPageVM = new ClassPageViewModel();
MainPage = new MainPage();
}
}
Затем на странице, на которой вы хотите использовать эту модель просмотра, вы можете использовать тот же экземпляр App.classPageVM
:
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
this.BindingContext = App.classPageVM;
}
}