多くのユーザーが利用できるアプリケーションを構築しています。各ユーザーは、次の認証レベルのいずれかに分類されます。
public enum AuthenticationEnum
{
User,
Technitian,
Administrator,
Developer
}
一部のコントロール(ボタンなど)は、特定のレベルのユーザーにのみ公開されます。現在のユーザーの認証レベルを保持するプロパティがあります。
public AuthenticationEnum CurrentAuthenticationLevel { get; set; }
このプロパティをいくつかのコントロールの 'Visibilty'プロパティにバインドし、パラメーターをConverterメソッドに渡して、コントロールを表示できる最低の認証レベルを伝えたいと思います。例えば:
<Button Visibility="{Binding Path=CurrentAuthenticationLevel, Converter={StaticResource AuthenticationToVisibility}, ConverterParameter="Administrator"}"/>
「管理者」と「開発者」だけがボタンを見ることができることを意味します。残念ながら、上記のコードは「Administrator」を文字列として渡します。もちろん、コンバーターメソッド内でSwitch-Caseを使用して、文字列をAuthenticationEnumに変換できます。しかし、これは醜く、メンテナンスエラーが発生しやすくなります(列挙型が変更されるたびに、コンバーターメソッドが変更されるはずです)。
重要なオブジェクトをパラメータとして渡すより良い方法はありますか?
ArsenMkrtの答えは正しいです、
これを行う別の方法は、ConverterParameter
でx:Static構文を使用することです
<Button ...
Visibility="{Binding Path=CurrentAuthenticationLevel,
Converter={StaticResource AuthenticationToVisibility},
ConverterParameter={x:Static local:AuthenticationEnum.Administrator}}"/>
そしてコンバーターで
public class AuthenticationToVisibility : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
AuthenticationEnum authenticationEnum = (AuthenticationEnum)parameter;
//...
}
}
ユーザー
(AuthenticationEnum)Enum.Parse(typeof(AuthenticationEnum),parameter)
列挙子として文字列を解析する