Erreur ImageSourceConverter pour Source = null

Je lie la propriété Source d’une image à une chaîne. Cette chaîne peut être nulle, auquel cas je ne souhaite tout simplement pas afficher une image. Cependant, je reçois ce qui suit dans ma sortie de débogage:

System.Windows.Data Error: 23: impossible de convertir ” à partir du type ” pour taper ‘System.Windows.Media.ImageSource’ pour la culture ‘en-AU’ avec les conversions par défaut; envisager d’utiliser la propriété Converter de la liaison. NotSupportedException: ‘System.NotSupportedException: ImageSourceConverter ne peut pas convertir depuis (null). à System.ComponentModel.TypeConverter.GetConvertFromException (valeur Object) à System.Windows.Media.ImageSourceConverter.ConvertFrom (contexte ITypeDescriptorContext, culture CultureInfo, valeur Object) dans MS.Internal.Data.DefaultValueConverter.ConvertHelper (Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward) ‘

Je préférerais que cela ne soit pas affiché car c’est juste du bruit – y a-t-il un moyen de le supprimer?

@AresAvatar a raison de suggérer que vous utilisez un ValueConverter, mais cette implémentation n’aide pas la situation. Cela fait:

public class NullImageConverter :IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return DependencyProperty.UnsetValue; return value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { // According to https://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.convertback(v=vs.110).aspx#Anchor_1 // (kudos Scott Chamberlain), if you do not support a conversion // back you should return a Binding.DoNothing or a // DependencyProperty.UnsetValue return Binding.DoNothing; // Original code: // throw new NotImplementedException(); } } 

Le renvoi de DependencyProperty.UnsetValue résout également les problèmes de performances liés au lancement (et à l’ignorance) de toutes ces exceptions. Renvoyer un new BitmapSource(uri) éliminerait également les exceptions, mais il y a toujours un impact sur les performances (et ce n’est pas nécessaire).

Bien sûr, vous aurez également besoin de la plomberie:

En ressources:

  

Votre image:

  

Liez votre image directement sur un object et renvoyez “UnsetValue” si nécessaire

  

La propriété dans votre ViewModel:

  private ssortingng _imagePath = ssortingng.Empty; public object ImagePath { get { if (ssortingng.IsNullOrEmpty(_imagePath)) return DependencyProperty.UnsetValue; return _imagePath; } set { if (!(value is ssortingng)) return; _imagePath = value.ToSsortingng(); OnPropertyChanged("ImagePath"); } }