Оболочка приложения Xamarin Forms OnProperty не изменена для представления FlyoutHeader - PullRequest
0 голосов
/ 07 февраля 2020

Я связываю свойство текста из модели представления с представлением FlyoutHeader выдвижного меню оболочки приложения.

Все события обновления корректно запускаются при инициализации приложения, однако есть страница, которую пользователь может go для обновления их информации

Проблема, с которой я столкнулся, заключается в том, что при переходе на эту страницу и выполнении обновления представление FlyoutHeader не обновляется в ответ на модель представления

Is что-то указывает c на выдвигающееся меню, что означает, что как только оно загружено, оно не изменяется в ответ на изменение свойства ...? Не кажется правильным

Из AppShell xaml

<Shell.FlyoutHeader>
    <views:FlyoutHeader />
</Shell.FlyoutHeader>

Из кода Flyoutheader за

    private LocationsViewModel _vm;

    public FlyoutHeader()
    {
        InitializeComponent();

        this.BindingContext = new LocationsViewModel();
    }

    protected override void OnBindingContextChanged()

    {

        _vm = BindingContext as LocationsViewModel;


        _vm.PropertyChanged += _vm_PropertyChanged;

        _vm.SetUserLocation();

    }

Пользователь переходит на страницу «Изменить местоположение» с помощью кнопки в представлении FlyoutHeader , называемый так

            await Shell.Current.GoToAsync("changelocation");

В моем журнале отладки я вижу, что объект привязки 'user' в LocationsViewModel запускает OnPropertyChanged в ответ на изменение, внесенное на этой странице, но затем возвращается назад и при открытии всплывающего меню ничего не изменилось, и я вижу, что PropertyChanged не запускается для этого представления?

Я думал, что весь смысл привязки OnPropertyChanged был даже при загруженном представлении, когда происходит обновление, которое вызывает ответ для представления?

1 Ответ

1 голос
/ 07 февраля 2020

Проблема в основном в том, что вы создаете несколько экземпляров одной и той же ViewModel, так что дело в том, что вы пытаетесь изменить заголовок, связанный со свойством в вашей ViewModel, который затем привязывается к вашему View, так что для вашего Представление, отражающее изменения, которые вы внесли в вашу ViewModel, должно иметь экземпляр ViewModel, который привязан к нему, если это имеет смысл!

Это решит вашу проблему

Удачи!

...