今天,在涉及将BitmapImage
绑定到ImageBrush
XAML标记时,我遇到了一种奇怪的.NET框架行为。
我正在做的是尝试在属性的getter中创建一个BitmapImage
对象。在某些情况下,图像的加载可能会失败(例如,当找不到资源时)。
以下是该属性的代码:
public BitmapImage BackgroundImg
{
get
{
try
{
return ResourceHelper.GetImage(this.GetType().Namespace, EnumHelper.GetImageUri(MathFunction));
}
catch(ArgumentException e)
{
MessageBox.Show(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return null;
}
}
}
正如您在上面所看到的,每次无法找到资源时,我都会显示一个消息框。我遇到的问题是该属性被击中两次,而我只通知视图一次(RaisePropertyChanged(() => BackgroundImg)
)。当然,我并没有在代码中的任何地方调用该属性。
我找到了这种情况的解决方案,即将属性类型从BitmapImage
更改为object
,但我仍然想知道问题的根源以及我是不是只是做错了。
所以问题是:上述行为的原因是什么?除了将属性类型更改为object
之外还有其他解决方法吗?