Hallo,
Bin gerade am lernen nur leider stehe ich mit meinem Wissen jetzt an. Hab auch schon geschlagene 2 Tage gegoogelt aber alle
Lösungen und Anregungen sind für meinen derzeitigen Wissenstand einfach zu komplex.
Daher hoffe ich dass mir jemand einen einfach Tipp geben kann.
Aufgabe -> Ich muss via Codebind (unbedingt!) eine Listbox füllen mit festgelegten Bildern und einer Beschreibung dazu.
Wenn das Bild i.d. Box ausgewählt wird soll die dazugehörige Beschreibung angezeigt werden.
Nun dachte ich mir ich lege ein Objekt an mit Instanzvariabeln und befülle diese mit Werten dass ich kein Problem.
Mittels Binding binde ich dass ganze an die XAML. Wo ich aussteige ist das ganze auch noch mit einem Bild zu machen.
(Die Bilder habe ich in den Projektordner abgegelegt. Der Ordner wurde in Visual Studio dem Projekt hinzugefügt. Alle Bilder
sind JPGs.)
Danke für Eure Hilfe.
z.B. so in der Art
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| class Person { string firstname; public string Firstname { get { return firstname; } set { firstname = value; } } string lastname; public string Lastname { get { return lastname; } set { lastname = value; } } public override string ToString() { return Firstname+" "+Lastname; } } public DataItem( string title, string description) { _title = title; _description = description; } |
In der XAML
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| <Window.Resources> <DataTemplate x:Key="ListItemTemplate"> <StackPanel> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="32"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Image Source="GoLtrHS.png" Grid.Column="0" Grid.RowSpan="2"/> <TextBlock Text="{Binding Path=Title}" Grid.Column="1" Grid.Row="0" FontWeight="Bold"/> <TextBlock Text="{Binding Path=Description}" Grid.Column="1" Grid.Row="1" /> </Grid> </StackPanel> </DataTemplate> </Window.Resources> |
In diesem Falle wird aber immer das gleiche Bild angezeigt und es wurde i.d. XML hinzugefügt.
Ich muss es unbedingt via Codebind laden...
2ter Lösungsansatz:
Hier habe ich es geschafft die Bilder schon mal richtig zu laden nur wie verknüpfe ich diese dann mit der Klasse für die Details ?!...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes;
namespace Listbox_Hundv2 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } }
public static class Hundloader { public static List<BitmapImage> LoadImages() { List<BitmapImage> hundImages = new List<BitmapImage>();
DirectoryInfo hundordner = new DirectoryInfo(@"..\..\Hund");
foreach (FileInfo hundbilder in hundordner.GetFiles("*.jpg")) { Uri uri = new Uri(hundbilder.FullName); hundImages.Add(new BitmapImage(uri)); }
return hundImages; } } } |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| <Window x:Class="Listbox_Hundv2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Listbox_Hundv2" Title="Custom ItemsPanel" Height="800" Width="300" WindowStartupLocation="CenterScreen" >
<Window.Resources> <Style TargetType="{x:Type ListBox}">
<Setter Property="ItemTemplate"> <Setter.Value> <DataTemplate> <Image Source="{Binding Path=UriSource}" Stretch="Fill" Width="120" Height="120" /> </DataTemplate> </Setter.Value> </Setter>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
</Style> </Window.Resources>
<Window.DataContext> <ObjectDataProvider ObjectType="{x:Type local:Hundloader}" MethodName="LoadImages" />
</Window.DataContext>
<ListBox ItemsSource="{Binding}" />
</Window> |
Danke für Eure Hilfe