我到处找,一无所获,最后决定问一下。
我有一个。net 5.0 WPF项目,我正在工作,我必须绑定一个URL(在线图像)到我的窗体上的图像的源。
我已经试过了:
CoverImage.Source = new BitmapImage("https://somesite..com/img.png");
以及通过XAML:
绑定它///XAML:
<Image Name="CoverImage"
Source="{Binding PreviewSource}"/>
///C#
public string PreviewSource { get; set; } = "https://somesite..com/img.png";
我尝试过其他解决方案,例如从HrrpRequest获取图像,然后通过MemoryStream创建它。
使用本地映像(在pc上)工作没有问题。
编辑:mm8的解决方案开始工作似乎没有任何原因(我没有碰代码自从第一次测试)
new BitmapImage(new Uri("https://www.google.se/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"))`
和
<Image Name="CoverImage" Source="https://www.google.se/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"/>
…
确保您的URL是有效的,并且可以从您的客户端机器访问。
您确定数据上下文正确吗?它在下面的应用程序中为我工作。
<<p>Xaml代码/strong><Grid>
<Image Name="CoverImage" Source="{Binding ImageSource}"/>
</Grid>
ViewModel
class MainWindowViewModel : ViewModelBase
{
private BitmapImage _imageSource;
public BitmapImage ImageSource
{
get => _imageSource;
set => SetProperty(ref _imageSource, value);
}
public MainWindowViewModel()
{
ImageSource = new BitmapImage(new Uri("https://www.google.se/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"));
}
}
ViewModelBase
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual bool SetProperty<T>(ref T member, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(member, value))
{
return false;
}
member = value;
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
MainWindow.xaml.cs
public MainWindow()
{
DataContext = new MainWindowViewModel();
InitializeComponent();
}