私はWPFアプリケーションを持っています。私はこのアプリケーションの異なるユーザーを持っており、各ユーザーにはそれぞれ異なるレベルが関連付けられています。レベルの高い人はメニュー項目にアクセスできません。メニュー項目を切り替えるWPF?
メニュー項目を切り替える方法はありますか?個々のメニュー項目の可視性を効率的に切り替えることは、これを達成するためのものですか?これには他の方法がありますか?
私はWPFアプリケーションを持っています。私はこのアプリケーションの異なるユーザーを持っており、各ユーザーにはそれぞれ異なるレベルが関連付けられています。レベルの高い人はメニュー項目にアクセスできません。メニュー項目を切り替えるWPF?
メニュー項目を切り替える方法はありますか?個々のメニュー項目の可視性を効率的に切り替えることは、これを達成するためのものですか?これには他の方法がありますか?
バインディングとコンバーターを使用してこれを実現できます。基本的には、メニューのDataContext
(メニュー項目に継承される)にアクセス権のレベルを指定するプロパティがある場合、それをメニュー項目の可視性に結びつけることができます。
明らかに、アクセス権は暗黙的にVisibility
列挙型に変換されないため、IValueConverter
インタフェースの実装を作成する必要があります。これは、現在のアクセス権に基づいてアクセス権を可視性に変換するか、レベル。これはまた、現在の権限レベルのコンセプトを持つコンバーターを必要とするため、静的なプロパティ(これは私が助言しないでしょう)にアクセスするか、コンバータインスタンスを保持する必要があります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
を変更、または上のプロパティにデータバインドすることができますあなたのビューモデル。
これを行うにはいくつかの方法があります。可視性の切り替えは1つの方法ですが、コードを他の人に読めるようにしたい場合は、ある種のデザインパターンを実装することをお勧めします。
MVVMパターンまたはMVCパターンのいずれかをお勧めします。つまり、ユーザーごとに異なるビューを作成する必要があります。
メニュー項目のような単純なものとして、UIのその部分をユーザーコントロールに分離し、そのユーザーコントロールでは、異なるユーザーに異なるXAMLを割り当てることができます。次に、コードで、どのユーザーがログインしているかに基づいて正しいXAML(ビュー)を表示させます。