Search code examples
c#wpfdatatemplatecelltemplate

c# WPF CellTemplate / DataTemplate for an Image list / array


What I have:

my class:

public class MyImage
{
    public String ImagePath { get; private set; }
    public String Name { get; private set; }

    // ...
}

XAML:

<Window.Resources>
    <DataTemplate x:Key="template_image">
        <Image Source="{Binding Path=ImagePath}" Stretch="None" />
    </DataTemplate>
    <DataTemplate x:Key="template_name">
        <TextBlock Text="{Binding Path=Name}" />
    </DataTemplate>
</Window.Resources>


<ListView x:Name="gui_listview_graphics" Margin="75,0,0,0">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Graphic" CellTemplate="{StaticResource template_image}" />
            <GridViewColumn Header="Name" CellTemplate="{StaticResource template_name}" />
        </GridView>
    </ListView.View>
</ListView>

Works fine.

Now what i now want..

I need to display an Image-List instead of just one Image.

my new class:

public class MyNewImage
{
    public ObservableCollection<String> ImagePath { get; private set; }
    public String Name { get; private set; }

    // ...
}

The DataTemplate should contain an Stackpanel which contains all images..

Is it possible?

If yes, how ..

Thank you!


Solution

  • This template should work:

    <DataTemplate x:Key="template_image_list">
      <ItemsControl ItemsSource="{Binding ImagePath}">
        <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
            <StackPanel />
          </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    
        <ItemsControl.ItemTemplate>
          <DataTemplate>
            <Image Source="{Binding}"></Image>
          </DataTemplate>
        </ItemsControl.ItemTemplate>
      </ItemsControl>
    </DataTemplate>
    

    Because a StackPanel does not have a property ItemsSource, you cannot bind directly to it. If you use it as ItemsPanelTemplate of an ItemsControl everything is fine.