(WPF) 通过代码将图像绑定到 URL 不起作用

(WPF) Binding an Image to an URL via code does not work

四处寻找,一无所获,才决定问问。

我有一个正在处理的 .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 创建它。

使用本地图片(在电脑上)没有问题。

编辑: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"/>

...在 .NET 5 上按预期工作。

确保您的 URL 有效并且可以从您的客户端计算机访问。

您确定数据上下文正确吗?它在下面的应用程序中对我有用。

Xaml代码

<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();
      
    }