控制可见性的WPF绑定“数字”不是有效的枚举值

本文关键字:有效 枚举 数字 可见性 WPF 绑定 控制 | 更新日期: 2023-09-27 18:11:14

我正在尝试在控件上设置可见性属性,以便当绑定值与任意值匹配时它是可见的。

我已经将我的转换器设置为静态资源

应用绑定

<Button Content="Foo" Visibility="{Binding SelectedValue, Converter={StaticResource ValueToVisibilityConverter}, ConverterParameter='1,2'}" />

但是我遇到了错误

错误1 '{绑定SelectedValue,转换器={StaticResourceValueToVisibilityConverter}, ConverterParameter='1,2'}'不能使用作为"可见度"的值。数字不是有效的枚举值。

我的转换器代码是
public class ValueToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
        {
            if (value == null || parameter == null || !(value is String))
                return Visibility.Collapsed;
            var currentValue = value.ToString();
            var matchStrings = parameter.ToString();
            var found = false;
            foreach (var state in matchStrings.Split(','))
            {
                found = (currentValue == state.Trim());
                if (found)
                    break;
            }
            return found ? Visibility.Visible : Visibility.Collapsed;
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

错误停止编译,感觉它太聪明了,忽略了我的转换器。

我是否应用错了,或者我对正在进行的某些过程一无所知。

编辑:

要将转换器作为静态资源,我在窗口定义中有以下内容

xmlns:myConverters="clr-namespace:<namespace>;assembly=<assemblyname>"

在我的窗口资源中,就在与其他转换器相同的代码旁边

<myConverters:ValueToVisibilityConverter x:Key="ValueToVisibilityConverter" />

控制可见性的WPF绑定“数字”不是有效的枚举值

这是应该工作的代码。

<Button Content="Foo" 
        Visibility="{Binding SelectedValue, 
                     Converter={StaticResource ValueToVisibilityConverter}, 
                     ConverterParameter=1|2}" />

你需要做的事情

  1. ConverterParameter中的值传递时不带引号。因此,从转换器参数中删除单引号。

  2. 没有什么可以阻止你发送多个值到参数,只要你有一个分隔符分隔它们,但是你不能使用逗号作为分隔XAML。因此在这种情况下使用管道,在转换器中使用管道|分割参数

此外,请注意
a)在资源中必须有像这样的转换器的静态资源。

<local:ValueToVisibilityConverter x:Key="ValueToVisibilityConverter" />

其中localxmlns:local="Your project in which this converter is defined"

注:多年前eBay在URL中使用的一个技巧是用QQ来分隔URL中的数据。文本数据中自然不会出现双q。如果你曾经被一个文本分隔符卡住,可以避免编码问题,只要使用QQ…但这不适用于split(它需要单个字符,但很高兴知道):)

您可以像

这样传递ConverterParameter
  <Binding Path="MyProperty"
             Converter="{StaticResource IntToBoolConverter}">
        <Binding.ConverterParameter>
            <sys:Int32>0</sys:Int32>
        </Binding.ConverterParameter>
    </Binding>