我需要将控件名称传递给安全对象中的方法,该方法返回IseNabled属性的布尔值,以及另一种返回其可见性的方法(折叠,隐藏或可见)。这些都必须检查以获取许可。

我尝试使用ObjectdatapRovider,但所有示例仅显示来自参数文本框的用户输入。我特别需要将控件名称传递给基于按钮x:名称属性的方法。

处理此问题的最简单,最有效的方法是什么。提前致谢。

更新:我正在尝试使用转换器,这是我想到的转换方法:

    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>
有帮助吗?

解决方案

您可以编写一个ivalueconverter来进行方法调用,并使用 {Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}. 。在转换方法中,您可以施放值以控制和访问控件的名称属性以传递到安全方法。通过检查TargetType,您可以确定是输出布尔值(用于类似的)还是可见性枚举。

***更新

我假设与您的转换器绑定一起使用的“许可”资源实际上是数据表,但您正在尝试将其用作字符串,以按名称识别元素作为绑定源。尝试使用 Source="{StaticResource PermissionsTable}" 而是传递数据资源本身。

其他提示

根据您架构应用程序的方式,可能有不同的方法来解决此问题。如果您使用用户控制视图,并且取决于代码,则最简单的路线可能是直接从后面的代码调用安全对象的方法,并直接在所讨论的控件上设置属性。

如果您正在使用MVVM,或者只是不喜欢代码的粉丝,那么解决此问题的另一种方法可能是使用按钮的名称抛弃并与 附件. 。附件属性是使用WPF依赖属性框架来存储有关对象或控制对象或控制最初声明自己的数据的一种方法。

随着附件的属性,也带来了一个称为附件行为的概念。从本质上讲,当您创建附件时,只要在对象上设置该属性时,就会为回调提供一个挂钩。当调用此回调时,您会收到对象设置属性以及属性的新值和旧值。

您可以将回调用作检查属性对您的安全对象的价值,并在您看到的情况下设置启用和可见的属性。

- Hth Dusty

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top