Solved

WPF Imaging Component Exception

Posted on 2009-05-13
8
1,871 Views
Last Modified: 2013-12-17
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

0
Comment
Question by:ctrlctrl
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
8 Comments
 
LVL 5

Expert Comment

by:rendaduiyan
ID: 24381083
try to use a ObservableCollection instead of list. say,
class YourImage:ObservableCollection<MyImage>
{
}
0
 

Author Comment

by:ctrlctrl
ID: 24386880
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
 

Author Comment

by:ctrlctrl
ID: 24386895
sorry .. abt that.. .MyImage = FlickrImage , I was trying to keep the type name anonymous... Pleasse ignore
0
Interactive Way of Training for the AWS CSA Exam

An interactive way of learning that will help you visualize core concepts so that you can be more effective when taking your AWS certification exam.  Built for students by a student to help them understand the concepts that they are being taught.

 
LVL 5

Expert Comment

by:rendaduiyan
ID: 24428366
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
 

Author Comment

by:ctrlctrl
ID: 24433205
Hi rendaduiyan ,

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

Thank You
0
 
LVL 5

Expert Comment

by:rendaduiyan
ID: 24438779
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
 

Author Comment

by:ctrlctrl
ID: 24443194
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
 

Accepted Solution

by:
ctrlctrl earned 0 total points
ID: 24446002
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

Featured Post

PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For a while now I'v been searching for a circular progress control, much like the one you get when first starting your Silverlight application. I found a couple that were written in WPF and there were a few written in Silverlight, but all appeared o…
Entering time in Microsoft Access can be difficult. An input mask often bothers users more than helping them and won't catch all typing errors. This article shows how to create a textbox for 24-hour time input with full validation politely catching …
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…

624 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question