c# - 将图像绑定(bind)到 ImageBrush

标签 c# xaml

我在尝试将图像绑定(bind)到 ImageSource 时遇到问题。我已经尝试了一些关于 stackoverflow 的其他修复,但没有一个有效。

我似乎在这一行中收到一条错误消息,指出集合“Items”必须为空。

ImageList.ItemsSource = List;

绑定(bind)在使用 FlickrData 类的“url”成员时运行良好。

MainWindow.xaml

    <ScrollViewer>
        <ListView  x:Name="ImageList" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
            <Rectangle Margin="5" Width="100" Height="100">
                <Rectangle.Fill>
                    <ImageBrush ImageSource="{Binding imageBinding}"/>
                </Rectangle.Fill>
            </Rectangle>
        </ListView>
    </ScrollViewer>

FlickrData 类:

public class FlickrData
{
    public String url { get; set;}

    public FlickrData(Photo photo)
    {
        url = photo.SmallUrl;
    }

    public ImageBrush imageBinding
      {
        get
          {
            ImageBrush brush = new ImageBrush();
            brush.ImageSource = new BitmapImage(new Uri(url));
            return brush;
          }
      }
}

主窗口类:

public partial class MainWindow : Window
{
    public ObservableCollection<FlickrData> List = new ObservableCollection<FlickrData>();
    public static Flickr flickr = new Flickr("XXXXXXXXXXXXXX");

    public MainWindow()
    {

        InitializeComponent();
    }

    public void SearchWithInput(object sender, RoutedEventArgs e)
    {
        var options = new PhotoSearchOptions { Tags = SearchInput.Text, PerPage = 20, Page = 1 };
        PhotoCollection photos = flickr.PhotosSearch(options);

        List.Clear();
        foreach (Photo photo in photos)
        {
            String flickrUrl = photo.WebUrl;
            Console.WriteLine("Photo {0} has title {1} with url {2}", photo.PhotoId, photo.Title, photo.WebUrl);
            List.Add(new FlickrData(photo));
        }
        ImageList.ItemsSource = List;
    }
}

最佳答案

这样做是为了清理进程

  1. 将 XAML 的 ListView 更改为 ItemsSource="{Binding List}",只需执行一次。
  2. 删除现在多余的 ImageList.ItemsSource = List;

列表控件将相应地更新自身,因为 ObservableCollection 发送列表控件订阅的更改通知。

关于c# - 将图像绑定(bind)到 ImageBrush,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48649773/

相关文章:

c# - 如何使用具有两个不同参数值的 HttpGet 方法

c# - 如何在 C# 中以编程方式选择 TreeView 的节点?

c# - 如何将字典中的所有负值设置为零?

c# - WPF ComboBox 绑定(bind) ItemsSource

c# - 使用 C# XAML 中的按钮保存数据

c# - 从内存中的 .CAB 存档或 InfoPath XSN 文件中提取的最少 C# 代码

c# - 以代码为参数的函数

wpf - 如何将索引属性绑定(bind)到 WPF 中的控件

c# - 如何在椭圆到达 Canvas 中间后向 Canvas 添加对象?

c# - 如何使 Windows Phone 应用程序像默认应用程序一样加载得更快?