C# 在AvaloniaUI中,如何显示来自web URL的图像?

C# 在AvaloniaUI中,如何显示来自web URL的图像?,c#,.net,image,reactiveui,avaloniaui,C#,.net,Image,Reactiveui,Avaloniaui,我正在使用ReactiveUI和MVVM开发Avalonia应用程序。 我想显示一个来自web URL的图像,实现这一点的最佳做法是什么? 我已设置以下绑定: this.OneWayBind( 视图模型, vm=>vm.UserProfileImageUrl, v=>v.ProfileImage.Source, 图像转换器 ).一次性使用(一次性使用); 和绑定适配器: 专用IImage图像转换器(字符串arg) { } 但是我不知道如何实现绑定适配器来下载图像而不阻塞UI。Android上

我正在使用ReactiveUI和MVVM开发Avalonia应用程序。 我想显示一个来自web URL的图像,实现这一点的最佳做法是什么? 我已设置以下绑定:

this.OneWayBind(
视图模型,
vm=>vm.UserProfileImageUrl,
v=>v.ProfileImage.Source,
图像转换器
).一次性使用(一次性使用);
和绑定适配器:

专用IImage图像转换器(字符串arg)
{
}
但是我不知道如何实现绑定适配器来下载图像而不阻塞UI。Android上是否有类似Glide的工具


提前感谢,

您可以异步下载图像并将其存储在ViewModel中,或者使用下载完成事件,例如:

公共类MainWindowViewModel:ViewModelBase { 专用字符串棋盘URL=”https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Chess_Board.svg/2000px-Chess_Board.svg.png"; 公共字符串棋盘URL { get=>棋盘URL; 设置{ 此.RaiseAndSetIfChanged(参考棋盘URL,值); 下载图像(棋盘URL); System.Diagnostics.Debug.WriteLine(棋盘URL); } } 私有Avalonia.Media.Imaging.Bitmap chessboard=null; 公共Avalonia.Media.Imaging.Bitmap棋盘 { get=>棋盘; set=>this.RaiseAndSetIfChanged(参考棋盘,值); } 公共主窗口视图模型() { 下载图像(棋盘URL); } public void DownloadImage(字符串url) { 使用(WebClient=newWebClient()) { DownloadDataAsync(新Uri(url)); client.DownloadDataCompleted+=下载完成; } } 私有void DownloadComplete(对象发送方,DownloadDataCompletedEventArgs e) { 尝试 { 字节[]字节=e.结果; 流=新内存流(字节); var image=new Avalonia.Media.Imaging.Bitmap(流); 棋盘=图像; } 捕获(例外情况除外) { 系统.诊断.调试.写线(ex); Chessboard=null;//无法下载。。。 } } } 然后,您可以轻松地绑定到Url和关联的图像。例如,来自XAML的类似示例(使用适当的DataContext):



我认为在绑定转换器中下载图像是一个糟糕的设计选择。我宁愿使用字节数组或更好的Avalonia.Bitmap将其存储在viewmodel中。然后你可以异步下载图像,并在准备好后更新属性和用户界面。是的,我最终做到了!如果你想发一张支票,我会接受的