C#使用Template10在汉堡菜单中显示用户名

本文关键字:显示 用户 菜单 使用 Template10 | 更新日期: 2023-09-27 18:28:03

我正在开发一个Windows 10 UWP应用程序,我正在使用Template10库中的一个空白模板。我可以毫无问题地把汉堡菜单做好。该应用程序要求用户首先登录,然后转到该应用程序的"主页"。我想在用户登录后在汉堡菜单底部显示用户的用户id作为辅助按钮,或者如果他们没有登录(或注销),则显示登录选项。

下面是辅助按钮的XAML,它应该显示用户id:

<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>

后面的代码只是启用汉堡包菜单外壳的默认构造函数,添加了显示用户名的代码。

public Shell(NavigationService navigationService)
    {
        this.InitializeComponent();
        Menu.NavigationService = navigationService;
        if(user logged in)
        {
            Username.Text = Username;
        }
        else
        {
            Username.Text = "login";
        }
    }

该代码的部分作用是,即使用户登录后,它也会显示"登录"。只有当应用程序挂起/恢复或退出/重新启动时,才会显示用户名。如何确保用户登录后,汉堡菜单外壳中的辅助按钮立即更新,而无需重新启动/恢复应用程序?

C#使用Template10在汉堡菜单中显示用户名

由于您使用的是Template10,我建议您查看模型视图视图模型模式(Channel9介绍视频)。

使用此模式,您可以删除代码隐藏部分,并从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构造函数中更改HamburgerButtonInfoText,而是在UserDataContext中的任何位置。

请注意,RaisePropertyChanged来自MVVM Light Toolkit。