WPF绑定以控制可见性“数字无效枚举值”

时间:2014-07-02 05:14:14

标签: c# wpf binding ivalueconverter

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

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

应用绑定

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

但我遇到了错误

  

错误1'{Binding SelectedValue,Converter = {StaticResource   ValueToVisibilityConverter},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" />

2 个答案:

答案 0 :(得分:3)

这是应该有用的代码。

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

你需要做的事情

  1. ConverterParameter中的值没有任何引号传递。因此,从转换器参数中删除单引号。

  2. 没有什么可以阻止您向参数发送多个值,只要您有一个分隔符以便稍后将它们分开,但是您不能使用逗号分隔XAML。< / strong>因此在这种情况下使用管道,并在管道|中使用转换器拆分参数。

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

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

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

    注意:多年前曾经在网址中使用的一个技巧eBay是用QQ分隔网址中的数据。双Q在文本数据中不会自然出现。如果您因为文本分隔符而陷入困境而避免编码问题只需使用QQ ...虽然这不适用于拆分(这需要单个字符,但很高兴知道):)

答案 1 :(得分:0)

你可以像

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