WPF - привязать список к ObservableCollection изображений - PullRequest
3 голосов
/ 11 марта 2011

Это должно быть очень просто, но я просто не могу заставить его работать ...

CustomItem - это класс, у которого есть свойство ThumbnailImage. Я пытаюсь привязать ObservableCollection к ListBox для отображения.изображений.Это мой код:

public ObservableCollection<CustomItem> AvailableItems { get; set; }

 <ListBox Width="103" Height="480" ItemsSource="{Binding AvailableItems}">
    <ListBox.ItemTemplate>
       <DataTemplate>
          <Border BorderBrush="Black" BorderThickness="1">
             <ContentControl Content="{Binding Path=ThumbnailImage}" 
                                             Width="100" Height="100" />
          </Border>
       </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

CustomItem выглядит следующим образом

    public class CustomItem
        public Image ThumbnailImage { get; set; }
    }

Ничего не появляется в ListBox, когда я его запускаю.Есть идеи, что не так?Спасибо!

- Правка 1 - Я думаю, что я могу сказать из отладки, что closet.Items.Count == 0 когда AvailableItems.Count == 5. Я попытался добавить ItemsSource= "{Binding AvailableItems, UpdateSourceTrigger = PropertyChanged}", но это не помогло: (

- Изменить 2 -

Я делал следующее в моемXAML

DataContext="{Binding RelativeSource={RelativeSource Self}}" 

Вместо этого, когда я сделал следующее в коде, все работало:

DataContext = this;

Ответы [ 2 ]

3 голосов
/ 11 марта 2011

Я думаю, вы либо:
1) Не инициализировали вашу коллекцию ObservableCollection
2) Не установили DataContext вашего окна, либо
3) Вы устанавливаете изображения после добавленияваш CustomItem для ObservableCollection, и вы не реализовали INotifyPropertyChanged в своем классе CustomItem.

Ваш код, к тому же, мне кажется, это работает:

    public MainWindow()
    {
        InitializeComponent();
        this.AvailableItems = new ObservableCollection<CustomItem>();
        Image i = new Image();
        BitmapImage src = new BitmapImage();
        src.BeginInit();
        src.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures/Desert.jpg");
        src.EndInit();
        i.Source = src;
        i.Stretch = System.Windows.Media.Stretch.Fill;

        CustomItem ci = new CustomItem();
        ci.ThumbnailImage = i;

        this.AvailableItems.Add(ci);
    }


    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        this.DataContext = this;
    }
3 голосов
/ 11 марта 2011

Код, который вы разместили, выглядит нормально, поэтому проблема должна быть в другом

  • Имеет ли ListBox правильный DataContext, чтобы он мог правильно связываться с AvailableItems?
  • Как вы инициализируете свой Image в коде?

Пример

BitmapImage source = new BitmapImage();
source.BeginInit();
source.UriSource = new Uri(yourUriString, UriKind.RelativeOrAbsolute);
source.EndInit();

ThumbnailImage = new Image();
ThumbnailImage.Source = source;

Я вставил ваш код в пример проекта, и он работал нормально, загрузил его сюда
http://www.mediafire.com/download.php?m99kv1uglrr31j9

Сравните это с вашей версией, чтобы увидеть, что вам не хватает

...