2011-12-18 4 views
0

私はViewModelsでSilverlightアプリケーションを開発しています。Mainpage.xaml - OnNavigateTo

私のMainPage.xamlにはメニューが定義されており、誰かのアクセスレベルに基づいて折りたたまれたり特定のメニュー項目が表示されたりします。

私のMainPage.xaml.csではOnNavigateToが利用できないので、私はこれを行う方法について疑問を抱いていました。

メニューが

 <StackPanel> 
      <toolkit:MenuItem Header="Do Something" Visibility="{Binding CanDoSomething}" /> 
     </StackPanel> 

...あなたのメニューのためのMenuItemを作成すると、あなたのViewModelでproperyに可視性をバインドするには/アウトlogges

答えて

1

たびにユーザー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番目のコマンドは単にコマンドを無効にしますが、それでも '灰色で表示された'状態で表示されます。

+0

Hmmm、問題は、私がメインページでこれを使用したので、毎回ブラウザのページを手動でリフレッシュする必要があることです。 – ThomasVdBerge

+0

コードを見てみましょう... –

関連する問題