none
ListView Images Programmatisch hinzufügen RRS feed

  • Frage

  • Hey

    ich kriege grade graue Haare wegen der ListView.

    Ich würde gerne in jeder Zeile (in jedem Item) ein Image anzeigen.

    Wie ich das nun in XAML umsetzen kann, konnte ich in Erfahrung bringen. Jedoch möchte ich das Programmatisch machen da die Icons zur Laufzeit sich ändern können.

    Da ich ja leider keine ImageList in der ListView habe wie es früher war, bin ich nun aufgeschmissen. Google findet konkret zu dem Problem auch keine Antwort. 

    Hat das so schon wer gemacht?

    Brauche hier jetzt keinen 200 Zeilen langen Code dafür. Ich glaub wenn man mich hier mal auf den richtigen Weg bringt, schaffe ich das.

    Grüße :-)

    Freitag, 24. Juli 2015 18:36

Antworten

  • Hi,
    es ist eigentlich relativ einfach. Nimm das Bild, erzeuge ein BitmapImage und binde das an ein Image-Steuerelement, Hier mal ein Codebeispiel:

    XAML:

    <Window x:Class="Window5"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window5" Height="300" Width="300"
        xmlns:local="clr-namespace:WpfApplication1">
      <Window.Resources>
        <local:ViewModel5 x:Key="vm"/>
        <DataTemplate x:Key="BildCellTemplate">
          <DockPanel>
            <Image Source="{Binding Path=Anzeigebild}" Stretch="Fill" />
          </DockPanel>
        </DataTemplate>
      </Window.Resources>
      <Grid DataContext="{Binding Source={StaticResource vm}}">
        <ListView ItemsSource="{Binding View}">
          <ListView.View>
            <GridView>
              <GridViewColumn Header="Bild" Width="100"
                              CellTemplate="{StaticResource BildCellTemplate}"/>
              <GridViewColumn DisplayMemberBinding = "{Binding Path=Anzeigetext}" 
                              Header="Anzeigetext" Width="100"/>
            </GridView>
          </ListView.View>
        </ListView>
      </Grid>
    </Window>

    Dazu der ViewModel:

    Imports System.Collections.ObjectModel
    Imports System.ComponentModel
    
    Public Class ViewModel5
    
      Public Sub New()
        For i = 1 To 9
          Dim d1 As New Data5 With {.Anzeigetext = String.Format("Bild {0}", i)}
          Dim bmi As New BitmapImage
          With bmi
            .BeginInit()
            .UriSource = New Uri("C:\Users\IT\Pictures\Bild1.jpg")
            .DecodePixelWidth = 100
            .EndInit()
          End With
          d1.Anzeigebild = bmi
          Me._daten.Add(d1)
        Next
      End Sub
    
      Private _daten As New ObservableCollection(Of Data5)
      Private cvs As New CollectionViewSource
    
      Public ReadOnly Property View As ICollectionView
        Get
          cvs.Source = Me._daten
          Return cvs.View
        End Get
      End Property
    
      Public Class Data5
        Public Property Anzeigetext As String
        Public Property Anzeigebild As BitmapImage
      End Class
    
    End Class



    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks


    • Bearbeitet Peter Fleischer Freitag, 24. Juli 2015 20:43
    • Als Antwort markiert Phil795 Sonntag, 26. Juli 2015 18:38
    Freitag, 24. Juli 2015 20:41