WPF Imaging Component Exception

Hi I am getting this exception , when I try to bind a listview with a List<MyImage> type

"No imaging component suitable to complete this operation was found."

occurs for the target ListView and Binding Expression Path = AllImages

Please see attached code

Please let me know how to fix this
<DataTemplate x:Key="BrowsePictureTemplate" DataType="{x:Type loc:MainContent}">
            <Grid Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="0.2*"/>
                    <RowDefinition/>    
                    <RowDefinition Height="0.3*"/>
                    <RowDefinition Height="0.2*"/>
                </Grid.RowDefinitions>
                <Image Grid.RowSpan="3" Grid.Row="0" Source="{Binding ElementName=ImageList,Path=SelectedItem.Image}">
 
                </Image>
                <ListView Grid.Row="2" ItemsSource="{Binding AllImages}" Name="ImageList" Background="Gray" Opacity="0.7" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" >
                    <ListView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"></StackPanel>
                        </ItemsPanelTemplate>
                    </ListView.ItemsPanel>
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Opacity="1">
                                <Image Source="{Binding Image}" Width="100" Height="100" Opacity="1"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
 
                <StackPanel Grid.Row="3" Background="Black">
 
                </StackPanel>
                <StackPanel Grid.Row="0" Background="Gray" Opacity="0.7" >
                    <TextBlock  Text="Awesome" />
                </StackPanel>
            </Grid>
        </DataTemplate>
 
 
////Code Behind C#///
 
public class MainContent
    {
  public List<MyImage> AllImages
        {
            get 
            {
                List<MyImage> result = new List<MyImage>();
                foreach (string filename in System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)))
                {
                    try
                    {
                        result.Add(new MyImage(new BitmapImage(new Uri(filename)), System.IO.Path.GetFileNameWithoutExtension(filename)));
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
 
                }
                return result;
            }
           
        }
 
        /// <summary>
        /// Class for MyImage Type
        /// </summary>
 
        public class MyImage
        {
 
            public MyImage(ImageSource image, string name)
            {
                _image = image;
                _name = name;
            }
 
            public override string ToString()
            {
                return _name;
            }
            private ImageSource _image;
            public ImageSource Image { get { return _image; } }
 
            private string _name;
            public string Name { get { return _name; } }
 
        }
 
}

Open in new window

ctrlctrlAsked:
Who is Participating?
 
ctrlctrlConnect With a Mentor Author Commented:
Hi rendaduiyan:,

I solved it from this forum
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/db2458f8-5773-4363-8ef0-0fb9d14ecf72

Please try to answer my other thread , how to access controls in datatemplate from code behind !!!


Thank You
0
 
rendaduiyanCommented:
try to use a ObservableCollection instead of list. say,
class YourImage:ObservableCollection<MyImage>
{
}
0
 
ctrlctrlAuthor Commented:
I used the below and it didnt work
      public ObservableCollection<MyImage> AllImages
        {
            get 
            {
                ObservableCollection<MyImage> result = new ObservableCollection<MyImage>();
               foreach (string filename in System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)))
               {
                   try
                   {
                       result.Add(new FlickrImage(new BitmapImage(new Uri(filename)), System.IO.Path.GetFileNameWithoutExtension(filename)));
                   }
                   catch (Exception ex)
                   {
                       throw new Exception(ex.Message);
                   }
 
               }
               return result;
 
            }
        }

Open in new window

0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
ctrlctrlAuthor Commented:
sorry .. abt that.. .MyImage = FlickrImage , I was trying to keep the type name anonymous... Pleasse ignore
0
 
rendaduiyanCommented:
you do not post all your XAML.
I suggest you removing Binding AllImage and left Binding there.
and then binding the source in your code behind.
ItemsSource="{Binding}"

and try ImageList.datacontext = ...
or other attr.
0
 
ctrlctrlAuthor Commented:
Hi rendaduiyan ,

sorry I didnt Understand what you meant , Please tell me in a little more detail.

Thank You
0
 
rendaduiyanCommented:
in XAML, tell listview ItemSource={Binding}. not assign the AllImage to it.
you AllImage is not visible in the XAML.

Instead, set the datacontext in the c#code for this XAML.
Or paste your XAML here.
0
 
ctrlctrlAuthor Commented:
a problem with this is , my listView is inside my datatemplate, I do not know how to access controls inside the datatemplate from code behind !! I also have a thread in this forum that asks how to access controls inside data template.

Please throw some light
0
All Courses

From novice to tech pro — start learning today.