2

私は Windows 10 UWP アプリに取り組んでおり、Template10 ライブラリの空のテンプレートを使用しています。ハンバーガーメニューを問題なく動作させることができます。このアプリでは、ユーザーが最初にログインしてから、アプリの「ホームページ」に進む必要があります。ログイン後にハンバーガーメニューの下部にあるユーザーのユーザー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";
        }
    }

このコードは、ユーザーがログインした後でも「ログイン」と表示されるという点で部分的に機能します。ユーザー名は、アプリが一時停止/再開または終了/再起動した場合にのみ表示されます。ユーザーがログインするとすぐに、アプリを再起動/再開することなく、ハンバーガー メニュー シェルのセカンダリ ボタンが更新されるようにするにはどうすればよいですか?

4

1 に答える 1

2

Template10をお使いなので、Model View View Modelのパターン(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 に通知され、そのTextが更新されます。このように、Shell コンストラクターで HamburgerButtonInfo Text を変更する必要はありませんが、UserDataContext 内のどこでも変更できます。

MVVM Light ToolkitRaisePropertyChangedからのものであることに注意してください。

于 2015-12-28T12:55:35.243 に答える