我使用IValueConverter将枚举绑定到三个RadioButton。
当选中RadioButton时,我将使用ConvertBack来设置值。
但我发现我不知道怎么写ConvertBack
public ImageShackEnum KkaHsa { get; set; }
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if (value is true)
{
return MyEnum;
}
//If I return DependencyProperty.UnsetValue that will throw.
}
我无法在wwf中找到uwp中的Binding.DoNothing。
我定义了一个新的枚举值来解决它,但我认为它可能存在另一种解决方法。
答案 0 :(得分:1)
如果您返回不兼容的值,则可以使ConvertBack
操作无效 - 理想情况下为null
。在这种情况下,无法将其分配回视图模型中的属性,系统将忽略它,而是响应被选中的IsChecked == true
RadioButton
。
替代方法是为枚举的每个状态创建多个属性,一个bool
属性,以及一个整体SelectedValue
。例如:
public MyEnum SelectedValue {...}
public bool ValueIsOptionA
{
get => SelectedValue == MyEnum.OptionA;
set => SelectedValue = MyEnum.OptionA;
}
public bool ValueIsOptionB
{
get => SelectedValue == MyEnum.OptionB;
set => SelectedValue = MyEnum.OptionB;
}
public bool ValueIsOptionC
{
get => SelectedValue == MyEnum.OptionC;
set => SelectedValue = MyEnum.OptionC;
}
然后将每个RadioButton.IsChecked
绑定到各自的ValueIsOptionX
属性。
显然,这个解决方案会导致更多的代码重复,但它可以避免肮脏的黑客攻击。值null
。