首页 文章

WPF - ConverterParameter中的动态值

提问于
浏览
2

有一种情况,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 回答

  • 5

    为什么不绑定某些东西并在绑定的内容中完成工作,例如viewmodel?它可能会更清洁,更快 .

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

相关问题