不实现IValueConvert.ConverBack时的最佳实践



只是想知道,当实现一个没有意义的完整ConvertBack实现(或仅用作OneWay的实现)的IValueConverter时,人们认为什么是最佳实践?

如果它抛出(在这种情况下是什么异常),则返回null或返回一些默认值。

想法?

IValueConverter.ConvertBack的文档建议返回DependencyProperty.UnsetValue

数据绑定引擎未捕获由引发的异常用户提供的转换器。任何异常由ConvertBack抛出的方法,或任何未捕获的异常由ConvertBack方法调用,被处理作为运行时错误。预期处理返回问题DependencyProperty。UnsetValue。

根据Microsoft的说法,您应该返回DependencyProperty.UnsetValue

我同意@Todd White的回答。

此外,为了节省时间,您可以实现一个为您实现ConvertBack的基本转换器类,这样您就不必每次都实现它来节省重复的代码。

从技术上讲,您也不必覆盖Convert;但它必须在ConverterBase中实现,因为它实现了IValueConverter接口的所有方法。在实践中,您每次都会覆盖Convert,而ConvertBack在大多数情况下都可以被忽略。

public class ConverterBase : IValueConverter
{
    public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
    public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}
public class VisibilityConverter : ConverterBase
{
    public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((bool)value ^ (parameter as bool? == true)).ToVisibility();
    }
}

当ConvertBack不包含任何功能,并且您不希望调用它时,抛出NotImplementedException。它不应该被调用,因此您想要一个运行时异常。

如果ConvertBack是被有意地调用的,那么你最好为它提供一个实现。一种选择是只返回DependencyProperty.UnsetValue,或者通过返回Dependency Property.UnssetValue来处理ConvertBack实现中的异常。

我对此的理由是:返回DependencyProperty.UnsetValue而不是抛出NotImplementedException,这会使它在ConvertBack方法被调用时变得不明显,而实际上你从未想过它会被调用。也许它现在应该有一些功能,因为它正在被调用并抛出运行时异常。如果只是返回DependencyProperty.UnsetValue.

,则会更难发现缺少的ConvertBack功能

相关内容

  • 没有找到相关文章

最新更新