@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}}"/>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…