我正在使用Windows 10 UWP应用,我正在使用Template10 library中的空白模板。我能够让汉堡包菜单顺利运行。该应用程序要求用户先登录,然后进入该应用程序的“主页”。我想在登录后将汉堡菜单底部的用户ID显示为辅助按钮,如果他们没有登录(或退出),则显示登录选项。
这是应该显示用户ID的辅助按钮的XAML:
<controls:HamburgerButtonInfo>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<SymbolIcon Symbol="Contact" Width="48" Height="48" />
<TextBlock Name="Username" Margin="12, 0, 0, 0" VerticalAlignment="Center"/>
</StackPanel>
</controls:HamburgerButtonInfo>
代码隐藏只是默认构造函数,用于启用汉堡菜单shell,并添加代码以显示用户名。
public Shell(NavigationService navigationService)
{
this.InitializeComponent();
Menu.NavigationService = navigationService;
if(user logged in)
{
Username.Text = Username;
}
else
{
Username.Text = "login";
}
}
代码部分工作,即使在用户登录后也显示“登录”。仅当应用程序暂停/恢复或退出/重新启动时,才会显示用户名。如何确保用户一旦登录,汉堡菜单shell中的辅助按钮就会更新,而无需重新启动/恢复应用程序?
答案 0 :(得分:2)
由于您使用的是Template10,我建议您查看模型视图模型模式(Channel9 introductive video)。
使用此模式,您可以删除代码背后的部分,并且从XAML级别,您可以执行以下操作:
<TextBlock Name="Username" Text="{Binding UserDataContext.LoginString}" Margin="12, 0, 0, 0" VerticalAlignment="Center"/>
UserDataContext
是对ViewModel类的引用,它暴露了一些属性,如LoginString
,可以是这样的:
public string LoginString
{
get
{
return _loginString;
}
set
{
if (_loginString == value)
{
return;
}
_loginString = value;
RaisePropertyChanged(() => LoginString);
}
}
每次从您的代码中您都会更改_loginString 的属性,您的TextBlock将被通知,其文本将被更新。这样,您就不必在Shell构造函数中更改HamburgerButtonInfo文本,而是在UserDataContext中的任何位置更改。
请注意,RaisePropertyChanged
来自MVVM Light Toolkit。