【发布时间】:2025-11-29 11:45:01
【问题描述】:
我有一个单选按钮布尔到整数转换器类:
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 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:
ViewModel 内部:
// 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。是的 - ConvertBack 方法中的错误。感谢您的评论。