2012-01-13 18 views
1

私はWPFアプリケーションを持っています。私はこのアプリケーションの異なるユーザーを持っており、各ユーザーにはそれぞれ異なるレベルが関連付けられています。レベルの高い人はメニュー項目にアクセスできません。メニュー項目を切り替えるWPF?

メニュー項目を切り替える方法はありますか?個々のメニュー項目の可視性を効率的に切り替えることは、これを達成するためのものですか?これには他の方法がありますか?

答えて

3

バインディングとコンバーターを使用してこれを実現できます。基本的には、メニューのDataContext(メニュー項目に継承される)にアクセス権のレベルを指定するプロパティがある場合、それをメニュー項目の可視性に結びつけることができます。

明らかに、アクセス権は暗黙的にVisibility列挙型に変換されないため、IValueConverterインタフェースの実装を作成する必要があります。これは、現在のアクセス権に基づいてアクセス権を可視性に変換するか、レベル。これはまた、現在の権限レベルのコンセプトを持つコンバーターを必要とするため、静的なプロパティ(これは私が助言しないでしょう)にアクセスするか、コンバータインスタンスを保持する必要があります1つのインスタンスのみを使用します)、現在の権限レベルを渡します。

1

はい、VisibilityプロパティはMenuItemで動作します。あなたはKaxamlに以下のコードを貼り付ける場合は、[編集]メニューが隠されている、などのツールがあることがわかります>項目2.

<Menu> 
    <MenuItem Header="_File"/> 
    <MenuItem Header="_Edit" Visibility="Collapsed"/> 
    <MenuItem Header="_Tools"> 
    <MenuItem Header="Item 1"/> 
    <MenuItem Header="Item 2" Visibility="Collapsed"/> 
    <MenuItem Header="Item 3"/> 
    </MenuItem> 
</Menu> 

また、プログラムVisibilityを変更、または上のプロパティにデータバインドすることができますあなたのビューモデル。

3

これを行うにはいくつかの方法があります。可視性の切り替えは1つの方法ですが、コードを他の人に読めるようにしたい場合は、ある種のデザインパターンを実装することをお勧めします。

MVVMパターンまたはMVCパターンのいずれかをお勧めします。つまり、ユーザーごとに異なるビューを作成する必要があります。

メニュー項目のような単純なものとして、UIのその部分をユーザーコントロールに分離し、そのユーザーコントロールでは、異なるユーザーに異なるXAMLを割り当てることができます。次に、コードで、どのユーザーがログインしているかに基づいて正しいXAML(ビュー)を表示させます。

関連する問題