46

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

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。しかし、これは見苦しく、メンテナンス エラーが発生しやすくなります (enum変更のたびに、コンバーター メソッドも変更する必要があります)。

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

4

2 に答える 2

99

ArsenMkrtの答えは正しいです、

これを行う別の方法は、次のx:Static構文を使用することです。ConverterParameter

<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;
        //...
    }
}
于 2011-02-09T08:47:42.023 に答える
8

ユーザー

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

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

于 2011-02-09T08:01:00.267 に答える