(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();
}
四处寻找,一无所获,才决定问问。
我有一个正在处理的 .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();
}