只是想知道在实现没有有意义的ConvertBack实现(或者只用作OneWay)的IValueConverter时,人们认为最佳做法是什么?
它应该抛出(在这种情况下是什么异常),返回null或返回一些默认值.
思考?
Tod*_*ite 45
IValueConverter.ConvertBack的MSDN文档建议返回DependencyProperty.UnsetValue.
数据绑定引擎不会捕获用户提供的转换器抛出的异常.ConvertBack方法抛出的任何异常,或ConvertBack方法调用的方法抛出的任何未捕获的异常都被视为运行时错误.通过返回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();
}
}
Run Code Online (Sandbox Code Playgroud)
当 ConvertBack 不包含任何功能,并且您不希望它被调用时,抛出 NotImplementedException。它不应该被调用,因此您需要运行时异常。
如果有意调用ConvertBack ,则最好为其提供实现。一种选择是仅返回 DependencyProperty.UnsetValue,或通过返回 DependencyProperty.UnsetValue 来处理 ConvertBack 实现中的异常。
我对此的理由是:返回一个 DependencyProperty.UnsetValue 而不是抛出 NotImplementedException 使得它在调用 ConvertBack 方法时并不明显,而你真的不打算这样做。也许它现在应该有一些功能,因为它正在被调用并抛出运行时异常。如果它只是返回 DependencyProperty.UnsetValue,那么发现缺少的 ConvertBack 功能会困难得多。