【发布时间】:2023-03-17 18:05:02
【问题描述】:
我有一个 WPF 图像控件,它的源属性绑定到返回图像的属性。
<Image Grid.Row="0"
Source="{Binding Path=ImageSrc, NotifyOnTargetUpdated=True, Converter={StaticResource imgToSrcConverter}}" />
然后我有一个转换器,它将图像绑定到源属性并将其转换为位图图像。当 bitmapimage 下载完成后,我想在我的视图模型中执行一个方法,所以我订阅了 BitmapImage 中的 DownloadCompleted 事件。那么如何从转换器调用视图模型中的方法呢?它会违反 MVVM 原则吗?
转换器:
public class ImgToSrcConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
Image image = value as Image;
if (image != null)
{
MemoryStream ms = new MemoryStream();
image.Save(ms, image.RawFormat);
ms.Seek(0, SeekOrigin.Begin);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
bi.DownloadCompleted += new EventHandler(bi_DownloadCompleted);
return bi;
}
return null;
}
public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
private void bi_DownloadCompleted(object sender, EventArgs e)
{
// Call my method in view model
}
}
【问题讨论】:
-
如果您的应用拥有
BitmapImage很重要,那么视图模型中的ImageSrc属性应该是BitmapImage类型,并且您不需要转换器 -
我不确定我是否理解您想要实现的目标?你能详细说明你到底想要做什么吗? “下载”是什么意思?当这个“下载”完成后你会做什么?