WPF - ConverterParameter中的动态值

时间:2014-03-19 12:23:54

标签: c# wpf ivalueconverter

有一种情况,UI中的复选框需要绑定到数字参数 - 实际上,某些值使复选框为“true”,否则为“false”。

最简单的方法是使用转换器:

[ValueConversion(typeof(int), typeof(bool?))]
public class TypeToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(bool?))
            throw new InvalidOperationException("The target must be a bool");

        if( (value < 3)
        {
            return true;
        }
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplmentedExpection();
    }
}

然后在XAML中:

<CheckBox IsChecked="{Binding Path=Type.TypeID, Converter={StaticResource TypeConverter}}" />

当使用Convert时,它就像魅力一样,但在使用ConvertBack时完全失败,因为它需要知道数值是什么(它取决于其他UI元素)才能知道要返回的数字 - 实际上它需要访问绑定对象。

我假设我可以使用ConverterParameter执行此操作,但从事物的外观来看,您无法将值绑定到此属性。

有没有办法解决这个烂摊子?

编辑:我已经通过搞乱原始绑定解决了这个问题,并且放弃了它,因为取消选中我想要做的就是删除项目。但是我将把它留在原处,因为它似乎是一个有效的问题,我对可能的解决方案感到好奇。

1 个答案:

答案 0 :(得分:5)

为什么不绑定某些内容并按照绑定的方式完成工作,例如viewmodel?它可能会更清洁,更快。

转换器在理论上很不错,但是在构建了许多大型WPF项目后,我几乎从不使用它们,原因如上所述。当然,你可以让它做你想做的,但重点是什么?您对这些转换发生的方式和时间的控制要少得多。