WPF IImageSource 绑定URL
时间: 2023-06-27 14:05:32 浏览: 146
WPF 中的Imagesource
WPF中的Image控件可以通过设置Source属性来显示图片,而IImageSource接口可以表示任何能够提供图像数据的对象。因此,我们可以将一个URL绑定到Image控件的Source属性上,从而动态地显示图片。
以下是一个简单的示例:
首先,我们需要定义一个实现IImageSource接口的类,用于获取指定URL的图片数据:
```csharp
public class UrlImageSource : IImageSource
{
private readonly string _url;
public UrlImageSource(string url)
{
_url = url;
}
public event EventHandler<ExceptionEventArgs> DownloadFailed;
public event EventHandler DownloadCompleted;
public void SetSource(Stream stream)
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = stream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
DownloadCompleted?.Invoke(this, EventArgs.Empty);
OnDownloadCompleted(bitmap);
}
protected virtual void OnDownloadCompleted(BitmapImage bitmap)
{
DownloadCompleted?.Invoke(this, EventArgs.Empty);
}
}
```
该类接受一个URL,并在SetSource方法中将URL中的图片数据加载到一个BitmapImage对象中。如果加载失败,则触发DownloadFailed事件。
接下来,我们可以在XAML中使用DataTemplate来绑定Image控件的Source属性:
```xml
<DataTemplate DataType="{x:Type local:MyViewModel}">
<StackPanel>
<TextBlock Text="{Binding Name}" />
<Image>
<Image.Source>
<Binding Path="ImageSource" />
</Image.Source>
</Image>
</StackPanel>
</DataTemplate>
```
在ViewModel中,我们可以将一个UrlImageSource对象赋值给ImageSource属性,这样就可以在UI中显示图片了:
```csharp
public class MyViewModel
{
public string Name { get; set; }
public IImageSource ImageSource { get; set; }
public MyViewModel()
{
ImageSource = new UrlImageSource("https://example.com/image.jpg");
}
}
```
当然,你也可以通过绑定数据源来动态地设置URL。
阅读全文