控制可见性的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" />
这是应该工作的代码。
<Button Content="Foo"
Visibility="{Binding SelectedValue,
Converter={StaticResource ValueToVisibilityConverter},
ConverterParameter=1|2}" />
你需要做的事情
ConverterParameter中的值传递时不带引号。因此,从转换器参数中删除单引号。
没有什么可以阻止你发送多个值到参数,只要你有一个分隔符分隔它们,但是你不能使用逗号作为分隔XAML。因此在这种情况下使用管道,在转换器中使用管道
|
分割参数
此外,请注意
a)在资源中必须有像这样的转换器的静态资源。
<local:ValueToVisibilityConverter x:Key="ValueToVisibilityConverter" />
其中local
为xmlns: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>