我正在尝试在控件上设置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" />
答案 0 :(得分:3)
这是应该有用的代码。
<Button Content="Foo"
Visibility="{Binding SelectedValue,
Converter={StaticResource ValueToVisibilityConverter},
ConverterParameter=1|2}" />
你需要做的事情
ConverterParameter中的值没有任何引号传递。因此,从转换器参数中删除单引号。
没有什么可以阻止您向参数发送多个值,只要您有一个分隔符以便稍后将它们分开,但是您不能使用逗号分隔XAML。< / strong>因此在这种情况下使用管道,并在管道|
中使用转换器拆分参数。
此外,请注意
a)资源中必须有这样的转换器的静态资源。
<local:ValueToVisibilityConverter x:Key="ValueToVisibilityConverter" />
其中local
为xmlns: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>