C# 使用 Template10 在汉堡菜单中显示用户名
C# Showing username in Hamburger menu with Template10
我正在开发 Windows 10 UWP 应用程序,我正在使用 Template10 library 中的空白模板。我能够毫无问题地使用汉堡包菜单。该应用程序要求用户先登录,然后进入应用程序的 "home page"。我想在用户登录后在汉堡菜单底部显示用户的用户 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";
}
}
该代码部分起作用,因为即使在用户登录后它也会显示 "login"。仅当应用 suspends/resumes 或 exits/restarts 时才会显示用户名。我如何确保只要用户登录,汉堡包菜单 shell 中的辅助按钮就会得到更新,而无需 restart/resume 应用程序?
由于您使用的是 Template10,我建议您看一下 Model View View Model 模式 (Channel9 introductive video)。
使用此模式,您可以删除部分后面的代码,并且从 XAML 级别,您可以执行以下操作:
<TextBlock Name="Username" Text="{Binding UserDataContext.LoginString}" Margin="12, 0, 0, 0" VerticalAlignment="Center"/>
UserDataContext
是对公开一些属性的 ViewModel class 的引用,例如 LoginString
,可以是这样的:
public string LoginString
{
get
{
return _loginString;
}
set
{
if (_loginString == value)
{
return;
}
_loginString = value;
RaisePropertyChanged(() => LoginString);
}
}
每次从您的代码中您将通过它的 属性 更改 _loginString 的值,您的 TextBlock 将被通知并且它的 Text 将被更新。这样,您不必在 Shell 构造函数中更改 HamburgerButtonInfo 文本,而是在您的 UserDataContext.
中的任何位置更改
请注意 RaisePropertyChanged
来自 MVVM Light Toolkit。
我正在开发 Windows 10 UWP 应用程序,我正在使用 Template10 library 中的空白模板。我能够毫无问题地使用汉堡包菜单。该应用程序要求用户先登录,然后进入应用程序的 "home page"。我想在用户登录后在汉堡菜单底部显示用户的用户 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";
}
}
该代码部分起作用,因为即使在用户登录后它也会显示 "login"。仅当应用 suspends/resumes 或 exits/restarts 时才会显示用户名。我如何确保只要用户登录,汉堡包菜单 shell 中的辅助按钮就会得到更新,而无需 restart/resume 应用程序?
由于您使用的是 Template10,我建议您看一下 Model View View Model 模式 (Channel9 introductive video)。
使用此模式,您可以删除部分后面的代码,并且从 XAML 级别,您可以执行以下操作:
<TextBlock Name="Username" Text="{Binding UserDataContext.LoginString}" Margin="12, 0, 0, 0" VerticalAlignment="Center"/>
UserDataContext
是对公开一些属性的 ViewModel class 的引用,例如 LoginString
,可以是这样的:
public string LoginString
{
get
{
return _loginString;
}
set
{
if (_loginString == value)
{
return;
}
_loginString = value;
RaisePropertyChanged(() => LoginString);
}
}
每次从您的代码中您将通过它的 属性 更改 _loginString 的值,您的 TextBlock 将被通知并且它的 Text 将被更新。这样,您不必在 Shell 构造函数中更改 HamburgerButtonInfo 文本,而是在您的 UserDataContext.
中的任何位置更改请注意 RaisePropertyChanged
来自 MVVM Light Toolkit。