ImageSourceConverter error for Source=null ImageSourceConverter error for Source=null wpf wpf

ImageSourceConverter error for Source=null


@AresAvatar is right in suggesting you use a ValueConverter, but that implementation does not help the situation. This does:

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

Returning DependencyProperty.UnsetValue also addresses the performance issues from throwing (and ignoring) all those exceptions. Returning a new BitmapSource(uri) would also get rid of the exceptions, but there is still a performance hit (and it isn't necessary).

Of course, you'll also need the plumbing:

In resources:

<local:NullImageConverter x:Key="nullImageConverter"/>

Your image:

<Image Source="{Binding Path=ImagePath, Converter={StaticResource nullImageConverter}}"/>


I used Pat's ValueConverter technique and it worked great.I also tried the TargetNullValue technique, by flobodob from here, and it also works great. It's easier and cleaner.

<Image Source="{Binding LogoPath, TargetNullValue={x:Null}}" />

TargetNullValue is simpler, and requires no converter.


Bind your image directly on an object and return "UnsetValue" if necessary

<Image x:Name="Logo" Source="{Binding ImagePath}"  />

The property in your ViewModel :

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