设置时,我有一个单选按钮布尔整数转换器类:布尔值,整数转换问题,从视图模型
public class RadioBoolToIntConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
int integer = (int)value;
if (integer == int.Parse(parameter.ToString()))
return true;
else
return false;
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
return parameter;
}
}
我有一个绑定到一个属性“TestTypeRef”一个StackPanel内的两个单选按钮:
<StackPanel Orientation="Horizontal">
<RadioButton
Content="Screening"
Margin="0 0 10 0"
IsChecked="{Binding Path=TestTypeRef, Mode=TwoWay, Converter={StaticResource RadioBoolToIntConverter}, ConverterParameter=0 }" />
<RadioButton
Content="Full"
Margin="0 0 10 0"
IsChecked="{Binding Path=TestTypeRef, Mode=TwoWay, Converter={StaticResource RadioBoolToIntConverter}, ConverterParameter=1 }" />
</StackPanel>
当我尝试在关联的ViewModel中设置绑定了单选按钮的属性的值时,会出现问题。
当我将值从0设置为1时 - 这很好。
当我设置从1到0值 - 属性值保持1:
视图模型内部:
// Set the default test type.
TestTypeRef = 0;
// ~~> TestTypeRef = 0
TestTypeRef = 1;
// ~~> TestTypeRef = 1
TestTypeRef = 0;
// ~~> TestTypeRef = 1 i.e. no change.
非常感谢您能提供任何帮助。
更新: 感谢@Rachel和@Will的反馈意见。 ConvertBack例程出错。固定它:
return value.Equals(false) ? DependencyProperty.UnsetValue : parameter;
在转换你的'ConvertBack'方法总是返回'ConverterParameter'的价值,所以它总是将是0或1,这取决于你的UI将其设置为。这看起来是错误的,并且闻起来像它跟你观察到的东西有关。你应该正确地实现ConvertBack方法,或者当你往返UI时看看里面发生了什么。 – Will
Hi @Will。是的 - 在ConvertBack方法中的错误。谢谢你的评论。 – AndyS