3

コントロール名を、IsEnabled プロパティのブール値を返すセキュリティ オブジェクトのメソッドと、その Visibility (Collapsed、Hidden、または Visible) を返す別のメソッドに渡す必要があります。これらは両方とも、許可のためにチェックする必要があります。

ObjectDataProvider を使用してみましたが、すべての例は、パラメーターのテキスト ボックスからのユーザー入力のみを示しています。特に、ボタンの x:Name プロパティに基づいてメソッドにコントロール名を渡す必要があります。

この問題を処理する最も簡単で効率的な方法は何ですか。前もって感謝します。

更新: コンバーターを使用しようとしていますが、これは私が思いついた変換方法です:

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values != null)
        {
            DataTable tblPermissions = (DataTable)values[0];
            string sFunctionName = values[1].ToString();

            DataRow[] rows = tblPermissions.Select("fun_name = '" + sFunctionName + "'");
            if ((bool)rows[0]["fun_enable"])
                return true;
            else
                return false;
        }

        return string.Empty;
    }

以下は xaml です。

                    <Button.IsEnabled>
                        <MultiBinding Converter="{StaticResource IsFunctionEnabledConverter}">
                            <Binding ElementName="{StaticResource PermissionsTable}" />
                            <Binding ElementName="btnSave" Path="Name" />
                        </MultiBinding>
                    </Button.IsEnabled>
4

2 に答える 2

2

IValueConverterを記述してメソッドを呼び出し、を使用してコントロール自体を渡すことができます{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}。次に、Convertメソッドで、値をControlにキャストし、ControlのNameプロパティにアクセスしてセキュリティメソッドに渡すことができます。targetTypeをチェックすることにより、ブール値(IsEnabledの場合)または可視性列挙型を出力するかどうかを決定できます。

***アップデート

コンバーターバインディングで使用される「PermissionTable」リソースは実際にはDataTableであると想定していますが、バインディングソースとして名前で要素を識別するための文字列として使用しようとしています。Source="{StaticResource PermissionsTable}"代わりにを使用して、DataTableリソース自体を渡してみてください。

于 2010-12-01T15:10:21.543 に答える
0

アプリケーションの設計方法に応じて、この問題へのアプローチ方法が異なる場合があります。ユーザー コントロール ビューを使用していて、コード ビハインドに依存している場合、コード ビハインドからセキュリティ オブジェクトのメソッドを直接呼び出し、問題のコントロールにプロパティを直接設定するのが最も簡単な方法です。

MVVM を使用している場合、またはコード ビハインドのファンではない場合、この問題を回避する別の方法として、ボタンの名前の使用をやめて、添付プロパティを使用することができます。添付プロパティは、WPF 依存関係プロパティ フレームワークを使用して、オブジェクトまたはコントロールが最初に宣言していないオブジェクトまたはコントロールに関するデータを格納する方法です。

添付プロパティに加えて、添付動作と呼ばれる概念があります。基本的に、添付プロパティを作成すると、プロパティがオブジェクトに設定されるたびに呼び出されるコールバックのフックが与えられます。このコールバックが呼び出されると、プロパティが設定されたオブジェクトと、プロパティの新しい値と古い値を受け取ります。

コールバックを機会として使用して、セキュリティ オブジェクトに対してプロパティの値を確認し、適切と思われる有効なプロパティと表示可能なプロパティを設定できます。

-- HTH ダスティ

于 2010-12-01T15:06:26.443 に答える