Solved

WPF Imaging Component Exception

Posted on 2009-05-13
8
1,865 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
  • 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
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 
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

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Modal Popup Extender control 1 39
start a process from a service 3 33
C# LINQ ForEach() question 6 55
Code enhancement 4 22
Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
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…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

820 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