web-dev-qa-db-ja.com

ConverterParameterでの列挙型の使用

多くのユーザーが利用できるアプリケーションを構築しています。各ユーザーは、次の認証レベルのいずれかに分類されます。

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に変換できます。しかし、これは醜く、メンテナンスエラーが発生しやすくなります(列挙型が変更されるたびに、コンバーターメソッドが変更されるはずです)。

重要なオブジェクトをパラメータとして渡すより良い方法はありますか?

39
Leonid

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;
        //...
    }
}
84
Fredrik Hedblad

ユーザー

 (AuthenticationEnum)Enum.Parse(typeof(AuthenticationEnum),parameter)

列挙子として文字列を解析する

7
Arsen Mkrtchyan