首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将图像绑定到ImageBrush

将图像绑定到ImageBrush
EN

Stack Overflow用户
提问于 2018-02-06 18:40:32
回答 1查看 787关注 0票数 2

在试图将图像绑定到ImageSource时,我遇到了一个问题。我已经尝试过其他一些修复堆栈溢出的方法,但它们都没有效果。

我似乎在这一行中出现了一个错误,即集合“项”必须是空的。

代码语言:javascript
复制
ImageList.ItemsSource = List;

当使用FlickrData类的"url“成员时,绑定工作得很好。

MainWindow.xaml

代码语言:javascript
复制
    <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类

代码语言:javascript
复制
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;
          }
      }
}

MainWindow类

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-02-06 19:45:54

这样做是为了清理流程。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48649773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档