在代码后台中,使用按钮的x:Name作为参数来绑定其IsEnabled/Visibility属性。

3
我需要将控件名称传递给安全对象中的一个方法,该方法返回IsEnabled属性的布尔值以及另一个方法,该方法返回其可见性(折叠、隐藏或可见)。这两个方法都必须进行权限检查。
我尝试使用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>
2个回答

2
您可以编写一个 IValueConverter 来调用方法并使用 {Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}} 传递控件本身。在 Convert 方法中,您可以将 value 强制转换为 Control 并访问 Control 的 Name 属性以传递给安全方法。通过检查 targetType,您可以确定是否输出布尔值(用于 IsEnabled)或 Visibility 枚举。

***更新

我假设您与转换器绑定使用的 "PermissionTable" 资源实际上是 DataTable,但您试图将其用作字符串来标识元素名称作为 Binding 源。尝试使用 Source="{StaticResource PermissionsTable}" 传递 DataTable 资源本身。


我尝试使用一个转换器,但遇到的问题是该转换器需要我传递安全对象以访问权限。我创建了一个多值转换器,使用控件名称和权限表。当我尝试使用此转换器时,出现以下错误:“无法将类型为'System.Data.DataTable'的对象强制转换为类型'System.String'”。 - jes9582
这听起来像是你的转换器代码从values[]中以错误的顺序提取项目的问题,但如果没有看到代码,我无法确定具体情况。 - John Bowen
我在原始问题中发布了一个代码示例,请让我知道是否有任何错误,但它们应该是正确的顺序。谢谢! - jes9582

0

根据您的应用程序架构方式,可能有不同的方法来解决这个问题。如果您正在使用用户控件视图并依赖于代码后台,您最简单的路线可能是直接从代码后台调用安全对象的方法,并直接在相关控件上设置属性。

如果您正在使用MVVM或者您不喜欢代码后台,另一种解决此问题的方法可能是放弃使用按钮名称,而是使用附加属性。附加属性是使用WPF依赖属性框架存储有关对象或控件的数据的一种方式,该对象或控件最初没有声明自己。

随附的附加行为概念。实质上,当您创建一个附加属性时,您会得到一个回调的钩子,每当该属性在对象上设置时就会调用该回调。当调用此回调时,您将收到设置该属性的对象以及属性的新旧值。

您可以利用回调机会检查属性值与安全对象的值是否匹配,并根据需要设置启用和可见属性。

-- 希望对您有所帮助 Dusty


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接