Solved

WPF Imaging Component Exception

Posted on 2009-05-13
8
1,849 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
 
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
6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

 

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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

This article describes relatively difficult and non-obvious issues that are likely to arise when creating COM class in Visual Studio and deploying it by professional MSI-authoring tools. It is assumed that the reader is already familiar with the cla…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
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…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

706 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now