Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
Hi i'm trying to select images from a folder and then display those images in a listview. I tried to modify a sample code,when i run the sample the images are not getting displayed,i have posted the code here,can anybody tell me what i am doing wrong?
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            MyImages = new ObservableCollection<MyImageClass>();
            OpenFileDialog ofd = new OpenFileDialog();
            
            ofd.Multiselect = true;
            ofd.Filter = "Image Files (*.jpg, *.bmp,*.png,*.gif)|*.jpg;*.bmp;*.png;*.gif|All Files|*.*";
            if (ofd.ShowDialog() == true)
            {
                string[] filePath = ofd.FileNames;
                int i=filePath.Length;
                string[] safeFilePath = ofd.SafeFileNames;
                foreach (string imgPath in filePath)
                {
                    foreach (string filename in safeFilePath)
                    {
                        MyImages.Add(new MyImageClass(filename, GetImageFromResourceString(imgPath)));
                    }
                }
            }
            
            //MyImages.Add(new MyImageClass("earth", GetImageFromResourceString("earth")));
            //MyImages.Add(new MyImageClass("mercury", GetImageFromResourceString("mercury")));
            //MyImages.Add(new MyImageClass("venus", GetImageFromResourceString("venus")));
        }
        public ObservableCollection<MyImageClass> MyImages { get; set; }
 
        private BitmapImage GetImageFromResourceString(string imageName)
        {
            BitmapImage image = new BitmapImage();
                    image.BeginInit();
                    image.UriSource = new Uri(imageName);
                    image.EndInit();
            return image; 
        }
 

    }
 
    public class MyImageClass
    {
        public MyImageClass(string title, ImageSource image)
        {
            this.Title = title;
            this.Image = image;
        }
 
        public string Title { get; set; }
 
        public ImageSource Image { get; set; }
    }
 
Here is the xaml
<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="ListBox">
            <Setter Property="ItemsPanel">
                <Setter.Value>
                    <ItemsPanelTemplate>
                        <WrapPanel />
                    </ItemsPanelTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <DataTemplate x:Key="MyImagesItemTemplate">
            <Grid Width="100" Height="100">
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="auto" />
                </Grid.RowDefinitions>
                <Image Grid.Row="0" Source="{Binding Path=Image}" />
                <Label Grid.Row="1" Content="{Binding Path=Title}" />
            </Grid>
        </DataTemplate>
    </Window.Resources>
    <Grid >
        <ListBox ItemsSource="{Binding Path=MyImages, ElementName=window1}" ItemTemplate="{StaticResource MyImagesItemTemplate}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
    </Grid>
</Window>
Posted 10-Jun-12 1:03am

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

I think the XAML won't notice that your ObservableCollection has been assigned.
 
You should initialize the ObservableCollection before you call InitializeComponent() in your constructor. The best thing to do is to move the InitializeComponent() call to the end of the constructor; then the whole collection is already filled.
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 520
1 Maciej Los 205
2 Suvendu Shekhar Giri 159
3 Peter Leow 140
4 Kornfeld Eliyahu Peter 133
0 Sergey Alexandrovich Kryukov 9,623
1 OriginalGriff 8,895
2 Peter Leow 5,044
3 Kornfeld Eliyahu Peter 3,333
4 Maciej Los 2,561


Advertise | Privacy | Mobile
Web04 | 2.8.150327.1 | Last Updated 25 Jun 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100