c# - 使用其 x :Name as a parameter in a method in the code-behind 绑定(bind)按钮 IsEnabled/Visibility 属性

标签 c# wpf data-binding isenabled objectdataprovider

我需要将控件名称传递给安全对象中的一个方法,该方法返回 IsEnabled 属性的 bool 值,另一个方法返回其可见性(折叠、隐藏或可见)。出于许可目的,必须检查这两者。

我曾尝试使用 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>

最佳答案

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

***更新

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

关于c# - 使用其 x :Name as a parameter in a method in the code-behind 绑定(bind)按钮 IsEnabled/Visibility 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4325020/

相关文章:

c# - 使用 IContainers 比直接使用 ObjectFactory (结构图)更好吗?

wpf - 增加StrokeThickness,但保持Path的尺寸

c# - 从 WPF ListView 读取数据。 C#

wpf - 如何将数据网格中的每一行设置为不同的颜色

c# - 为什么 TargetNullValue 更新可为空的 Source

c# - TransformedBitmap 缩放模式

c# - 在不返回 void、Task 或 Task<T> 的方法中等待某些内容的正确方法?

javascript - 将 Knockout 可观察属性绑定(bind)到 Bootstrap 单选按钮值失败

c# - 转换日期时间格式

wpf - 组合框、按钮和 ICommand 绑定(bind)(MVVM 式)