たびにユーザーloggesを変更する必要がありますあなたのViewModel内のプロパティは
public Visibility CanDoSomething { get; set; }
... thusly宣言することができ、あなたは、このようなあなたのViewModelのメソッドでそれを切り替えるでしょう...
private void SetMenuVisibility()
{
if (UserIsLoggedIn)
{
CanDoSomething = Visibility.Visible;
}
else
{
CanDoSomething = Visibility.Collapsed;
}
OnPropertyChange("CanDoSomething");
}
ユーザーがログインまたはログアウトするたびにこのメソッドを呼び出します。これはあなたが述べた方法でメニューアイテムを折りたたんだり展開したりすることになります。各MenuItemはViewModelのプロパティにバインドされていなければならず、ViewModelはINotifyPropertyChangedから継承する必要があります。あなたはICommandのパターンを使用したい場合
第二に、あなたは
<StackPanel>
<toolkit:MenuItem Header="Do Something" Command="{Binding DoSomethingCommand}" />
</StackPanel>
ViewModelには、このようなコマンドを宣言するだろう...あなたのViewModelにコマンドへのMenuItemのCommandプロパティをバインドします。.. 。
public ICommand DoSomethingCommand { get; set; }
そして、このようにそれを初期化...
private void InitializeDoSomethingCommand()
{
DoSomethingCommand = new RelayCommand
(
ExecuteDoSomething,
param=>UserIsLoggedIn
);
}
私はトンを使用しています彼は 'RelayCommand'をここに置いていますが、それと似たクラスがあります。
これらの2つのアプローチの違いは、最初の方法はMenuItemを折りたたんでエンドユーザーに見えないようにすることです。 2番目のコマンドは単にコマンドを無効にしますが、それでも '灰色で表示された'状態で表示されます。
Hmmm、問題は、私がメインページでこれを使用したので、毎回ブラウザのページを手動でリフレッシュする必要があることです。 – ThomasVdBerge
コードを見てみましょう... –