way two tutorial que español data context wpf data-binding

wpf - two - La mejor práctica cuando no se implementa IValueConvert.ConvertBack



wpf binding types (4)

Cuando ConvertBack no contiene ninguna funcionalidad, y no espera que se llame, lanzar una NotImplementedException. No debería haber sido llamado y, por lo tanto, desea una excepción de tiempo de ejecución.

Si se llama intencionalmente a ConvertBack, entonces será mejor que proporcione una implementación para él. Una opción es simplemente devolver DependencyProperty.UnsetValue, o manejar excepciones dentro de su implementación de ConvertBack devolviendo DependencyProperty.UnsetValue.

Mi justificación para esto sería: devolver un DependencyProperty.UnsetValue en lugar de lanzar una NotImplementedException lo hace obvio cuando se invoca un método ConvertBack cuando en realidad nunca se pretendió. Tal vez debería tener alguna funcionalidad ahora que se está invocando y arrojando una excepción de tiempo de ejecución. Sería mucho más difícil descubrir la funcionalidad ConvertBack que falta si solo está devolviendo DependencyProperty.UnsetValue.

Solo me pregunto qué piensan las personas que es la mejor práctica al implementar un IValueConverter que no tiene una implementación significativa de ConvertBack (o una que solo se utilizará como OneWay).

Si arroja (y en ese caso qué excepción), devuelve nulo o devuelve algún valor predeterminado.

¿Pensamientos?


Estoy de acuerdo con la respuesta de @Todd White.

Además, para ahorrar tiempo, puede implementar una clase de convertidor base que implemente ConvertBack para que no tenga que implementarlo cada vez que se guarde el código duplicado.

Técnicamente, no es necesario anular Convert cualquiera; Pero tiene que implementarse en ConverterBase ya que implementa todos los métodos de la interfaz IValueConverter . En la práctica, ConvertBack Convert cada vez y ConvertBack se puede ignorar la mayor parte del tiempo.

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(); } }


La documentación de MSDN para IValueConverter.ConvertBack recomienda devolver DependencyProperty.UnsetValue .

El motor de enlace de datos no detecta las excepciones lanzadas por un convertidor proporcionado por el usuario. Cualquier excepción que arroje el método ConvertBack, o cualquier excepción no detectada lanzada por los métodos que llama el método ConvertBack, se tratan como errores de tiempo de ejecución. Controle los problemas anticipados devolviendo DependencyProperty.UnsetValue.


Según Microsoft, debe devolver DependencyProperty.UnsetValue