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