如何传递一个整数作为ConverterParameter?

我想绑定到一个整数属性:

<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; } } 

问题是,当我的转换器被称为参数是string。 我需要它是一个整数。 当然,我可以parsingstring,但是我必须?

感谢任何帮助konstantin

这里你去!

 <RadioButton Content="None" xmlns:sys="clr-namespace:System;assembly=mscorlib"> <RadioButton.IsChecked> <Binding Path="MyProperty" Converter="{StaticResource IntToBoolConverter}"> <Binding.ConverterParameter> <sys:Int32>0</sys:Int32> </Binding.ConverterParameter> </Binding> </RadioButton.IsChecked> </RadioButton> 

诀窍是包含基本系统types的名称空间,然后至less以元素forms写入ConverterParameter绑定。

为了完整起见,还有一个可能的解决scheme(可能用更less的input):

 <Window xmlns:sys="clr-namespace:System;assembly=mscorlib" ...> <Window.Resources> <sys:Int32 x:Key="IntZero">0</sys:Int32> </Window.Resources> <RadioButton Content="None" IsChecked="{Binding MyProperty, Converter={StaticResource IntToBoolConverter}, ConverterParameter={StaticResource IntZero}}" /> 

(当然, Window可以replace为UserControlIntZero可以定义成更接近实际使用的地方。)

不知道为什么WPF人往往不喜欢使用MarkupExtension 。 这是包括这里提到的问题在内的许多问题的完美解决scheme。

 public sealed class Int32Extension : MarkupExtension { public Int32Extension(int value) { this.Value = value; } public int Value { get; set; } public override Object ProvideValue(IServiceProvider sp) { return Value; } }; 

如果这个标记扩展在XAML命名空间“m”中可用,那么原始的海报示例变成:

 <RadioButton Content="None" IsChecked="{Binding MyProperty, Converter={StaticResource IntToBoolConverter}, ConverterParameter={m:Int32 0}}" /> 

这是可行的,因为标记扩展parsing器可以看到构造函数参数的强types并进行相应的转换,而Binding的ConverterParameter参数是(较less信息的)对象types。

不要使用value.Equals 。 使用:

  Convert.ToInt32(value) == Convert.ToInt32(parameter) 

在XAML中以某种方式表示ConverterValue的types信息会很好,但我不认为现在是可能的。 所以我想你必须通过一些自定义的逻辑来将Converter Objectparsing为你想要的types。 我没有看到另一种方式。