Я пытаюсь создать всплывающий заголовок, который отображает аватар и имя аутентифицированного пользователя в FlyoutHeaderTemplate
.
Проблема, с которой я столкнулся, заключается в том, что похоже, что метод OnAppearing()
вообще не вызывается для AppShell
. Я ставил точки останова в этом методе и никогда не попадал в него.
Я также пытался использовать ContentView
для отображения заголовка во всплывающем окне, но оказалось, что у ContentView
нет событий жизненного цикла OnAppearing()
или OnDisappearing()
.
Как отобразить информацию о аутентифицированном пользователе во всплывающем меню? У меня есть информация о пользователе в моей локальной базе данных. Все, что мне нужно сделать, это:
var user = await _dbService.GetUser();
, чтобы прочитать информацию о пользователеLabel
для имени пользователя и Avatar
для изображения пользователя.Вот что у меня в AppShell
:
<Shell.FlyoutHeaderTemplate>
<DataTemplate>
<StackLayout>
<Label Text = "{Binding ???}"/>
</StackLayout>
</DataTemplate>
</Shell.FlyoutHeaderTemplate>
Это то, что я пробовал, но это не сработало. На самом деле, когда я прочитал информацию по предоставленной вами ссылке, похоже, что предполагаемое поведение событий появления и исчезновения для оболочки немного отличается. Например, эта ссылка гласит: «В приложении Shell добавление модальной страницы в стек модальной навигации приведет к тому, что все видимые объекты Shell вызовут событие Disappearing».
При первом запуске Appshell он попадет в конструктор, поэтому вы можете вызвать var user = await _dbService.GetUser();
в конструкторе. Затем привяжите оболочку к самой себе this.BindingContext = this;
. Добавьте строковое свойство, чтобы привязать его к текстовой метке в xaml.
private string name;
public string Name { get{return name;} set { SetProperty(ref name, value); }
public AppShell()
{
InitializeComponent();
Task.Run(async () =>
{
await GetUser();
});
this.BindingContext = this;
}
public async void GetUser(){
var user = await _dbService.GetUser();
Name = user.Name;
}
OnAppearing()
будет бить всякий раз, когда вы идете в await Shell.Current.GoToAsync("..");
. Так что вы также можете вызвать var user = await _dbService.GetUser();
в нем.
Похоже, что оболочка имеет Появляющееся событие. Вы можете подключиться к этому?