【问题标题】:C# Showing username in Hamburger menu with Template10C# 使用 Template10 在汉堡菜单中显示用户名
【发布时间】:2015-12-26 20:44:51
【问题描述】:

我正在开发一个 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>

代码隐藏只是启用汉堡菜单外壳的默认构造函数,其中添加了代码以显示用户名。

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

该代码的部分工作原理是即使在用户登录后它也会显示“登录”。用户名仅在应用挂起/恢复或退出/重新启动时显示。如何确保用户一登录,汉堡菜单外壳中的辅助按钮就会更新,而无需重新启动/恢复应用程序?

【问题讨论】:

  • 与您检查(用户登录)的方式(和地点)类似,您应该在用户登录和注销时触发某种事件(如果您想进行绑定,则属性更改事件,如果您想手动设置 Text 属性等其他一些自定义事件。)

标签: c# winrt-xaml uwp template10


【解决方案1】:

由于你使用的是Template10,建议你看看Model View View Model pattern(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 并且其Text 将被更新。这样,您不必在 Shell 构造函数中更改 HamburgerButtonInfo 文本,而是在您的 UserDataContext 中的任何位置。

请注意,RaisePropertyChanged 来自 MVVM Light Toolkit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多