我正在尝试绑定到整数属性:
<RadioButton Content="None"
IsChecked="{Binding MyProperty,
Converter={StaticResource IntToBoolConverter},
ConverterParameter=0}" />
我的转换器是:
[ValueConversion(typeof(int), typeof(bool))]
public class IntToBoolConverter : IValueConverter
{
public object Convert(object value, Type t, object parameter, CultureInfo culture)
{
return value.Equals(parameter);
}
public object ConvertBack(object value, Type t, object parameter, CultureInfo culture)
{
return value.Equals(false) ? DependencyProperty.UnsetValue : parameter;
}
}
问题是当我的转换器被调用时参数是字符串。我需要它是一个整数。当然我可以解析字符串,但是我必须这样做吗?
谢谢你的帮助,康斯坦丁
5条答案
按热度按时间b1zrtrql1#
给你!
诀窍是包含基本系统类型的命名空间,然后至少以元素形式编写ConverterParameter绑定。
vu8f3i0k2#
为了完整起见,还有一个可能的解决方案(可能需要更少的输入):
(Of当然,
Window
可以用UserControl
代替,并且IntZero
可以被定义为更接近实际使用的位置。)xriantvc3#
不知道为什么
WPF
的人往往不愿意使用MarkupExtension
。它是许多问题的完美解决方案,包括这里提到的问题。如果这个标记扩展是在
XAML
命名空间'local:
'中定义的,那么原始发布者的例子变成:这是因为标记扩展解析器可以看到构造函数参数的强类型并进行相应的转换,而Binding的ConverterParameter参数是(信息较少的)Object类型的。
z6psavjg4#
不要使用
value.Equals
。用途:mutmk8jj5#
以某种方式用XAML表示ConverterValue的类型信息是很好的,但我认为目前还不可能。因此,我猜您必须通过一些自定义逻辑将Converter对象解析为您期望的类型。我看不到其他方法。