wpf image listbox binding observablecollection

WPF-enlaza listbox a una ObservableCollection de imágenes



image binding (2)

Esto debería ser extremadamente simple, pero no puedo hacer que funcione ...

CustomItem es una clase que tiene una propiedad llamada ThumbnailImage Estoy intentando vincular un ObservableCollection a un ListBox para mostrar imágenes. Este es mi código:

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>

El CustomItem se ve así

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

No aparece nada en el ListBox cuando lo ejecuto. ¿Alguna idea de lo que está mal? ¡Gracias!

- Editar 1 - Supongo que lo que puedo decir de la depuración es que closet.Items.Count == 0 cuando AvailableItems.Count == 5. Intenté agregar ItemsSource = "{Vinculando artículos disponibles, UpdateSourceTrigger = PropertyChanged}", pero no lo hice no ayuda :(

- Editar 2 -

Estaba haciendo lo siguiente en mi XAML

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

en cambio, cuando hice lo siguiente en el código subyacente, todo funcionó:

DataContext = this;


Yo supongo que tú:
1) No inicializó su ObservableCollection
2) No configuró el DataContext de su Ventana, o
3) Estás configurando tus imágenes después de agregar tu CustomItem a ObservableCollection y no has implementado INotifyPropertyChanged en tu clase CustomItem.

Su código más esto parece funcionar para mí:

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


El código que publicaste parece estar bien, entonces el problema debe ser algo más

  • ¿ ListBox tiene el DataContext correcto para que pueda vincularse correctamente con AvailableItems ?
  • ¿Cómo estás inicializando tu Image en el código?

Ejemplo

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

Pegué su código en un proyecto de muestra y funcionó bien, lo subí aquí
http://www.mediafire.com/download.php?m99kv1uglrr31j9

Compáralo con tu versión para ver lo que te estás perdiendo