如何在IValueConverter中禁止ConvertBack值

时间:2018-04-06 02:46:14

标签: c# uwp

我使用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

我定义了一个新的枚举值来解决它,但我认为它可能存在另一种解决方法。

1 个答案:

答案 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