Support, Anregungen, Wünsche zur Tutorialreihe <WPF lernen/>

  • WPF MVVM

Es gibt 448 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    SO, das "Spezialkapitel" ist jetzt auch in das Inhaltsverzeichnis eingefügt.

    Gibts hier: Tutorialreihe <WPF lernen/>

    @Joshi
    Ja klar editieren und hinzufügen hatte ich eh vor, persistieren lass ich erstmal weg. Danke für den Input.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo @eichseinet

    Ja, das ist mir leider passiert, hatte ich falsch aufgenommen. Im Textbeitrag ist aber im Grunde genau das selbe zu lesen. Ist leider so.
    Werde ich in Zukunft besser aufpassen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Leute

    Ein neues Kapitel ist Online.

    3.2 Editieren und hinzufügen von Einträgen

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich habe mal ein Verständnisfrage zu dem Model des Telefonbuches. Und zwar geht es hier genauer um den 3. Konstruktor.

    VB.NET-Quellcode

    1. Public Sub New(salutation As EnuSalutation, firstName As String, lastName As String, image As String, birthday As Date?, contacts As List(Of Contact))
    2. Me.Salutation = salutation
    3. Me.FirstName = firstName : Me.LastName = lastName
    4. Me.Image = image : Me.Birthday = birthday
    5. ContactItems = New List(Of Contact)
    6. End Sub


    Hier wird mir contacts As List(Of Contact) untergkringelt mit dem Zusatz das es ein nicht verwendeter Parameter ist. Welchen Sinn hat dieser Parameter, ich verstehe es nicht. =(
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Da hast du, bzw. VisualStudio recht. Ist/war ein Fehler meinerseits.

    Hie gehört ein ContactItems = contacts hin.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha

    Erst mal gratulation zu Deinen Videos. Eine riesenarbeit, und wirklich gelungen.
    Ich habe mich nun endlich durchgerungen, mich mit WPF auseinanderzusetzen. Habe erst die ersten vier Videos gesehen und bin erstaunt, was mit diesem kleinen Basiswissen und etwas googeln grafikmässig schon alles möglich ist.

    Nun zu meiner Frage: Wenn ich im App.xaml Styles definiere und danach im MainWindow.xaml per Trigger ein Property verändere, gehen mir die im App.xaml definierten Propertys verloren, und ich muss sie trozdem wieder abgeben.
    Dafür gibt es sicher eine einfache Lösung.

    App.xaml

    XML-Quellcode

    1. [code]<Application.Resources>
    2. <Style TargetType="{x:Type Button}">
    3. <Setter Property="Width" Value="150"/>
    4. <Setter Property="Height" Value="30"/>
    5. <Setter Property="Margin" Value="10,20,15,15"/>
    6. <Setter Property="FontFamily" Value="Calibri"/>
    7. <Setter Property="FontSize" Value="16"/>
    8. <Setter Property="Opacity" Value="0.7"/>
    9. <Setter Property="Background" Value="Orange"/>
    10. </Style>
    11. </Application.Resources>[/code]


    MainWindow.xaml
    So geht es nicht...

    XML-Quellcode

    1. [code] <Button x:Name="b1" Content="Fett MouseOver">
    2. <Button.Style>
    3. <Style TargetType="{x:Type Button}">
    4. <Style.Triggers>
    5. <Trigger Property="IsMouseOver" Value="True">
    6. <Setter Property="FontWeight" Value="Bold"/>
    7. </Trigger>
    8. </Style.Triggers>
    9. </Style>
    10. </Button.Style>
    11. </Button>[/code]


    so funktionierts, kann jedoch die vorzüge desin App.xaml definierten Styles nicht nutzen

    XML-Quellcode

    1. [code] <Button x:Name="b1" Content="Fett MouseOver" Width="150" Height="30" Margin="10,20,15,15" FontFamily="Calibri" FontSize="16" Opacity="0.7" Background="Orange">
    2. <Button.Style>
    3. <Style TargetType="{x:Type Button}">
    4. <Style.Triggers>
    5. <Trigger Property="IsMouseOver" Value="True">
    6. <Setter Property="FontWeight" Value="Bold"/>
    7. </Trigger>
    8. </Style.Triggers>
    9. </Style>
    10. </Button.Style>
    11. </Button>[/code]


    Besten Dank für Deine / Eure Hilfe
    Hallo @Murmeli81

    Murmeli81 schrieb:

    Erst mal gratulation zu Deinen Videos.

    Danke für das kompliment.

    Murmeli81 schrieb:

    Dafür gibt es sicher eine einfache Lösung.

    Ja, da hast du recht, die gibt es. Das Stichwort hier ist "BasedOn".

    z.b.:

    XML-Quellcode

    1. <Button x:Name="b1" Content="Fett MouseOver" Width="150" Height="30" Margin="10,20,15,15" FontFamily="Calibri" FontSize="16" Opacity="0.7" Background="Orange">
    2. <Button.Style>
    3. <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
    4. <Style.Triggers>
    5. <Trigger Property="IsMouseOver" Value="True">
    6. <Setter Property="FontWeight" Value="Bold"/>
    7. </Trigger>
    8. </Style.Triggers>
    9. </Style>
    10. </Button.Style>
    11. </Button>


    Ich hoffe das hilft dir weiter.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha

    Danke für Deine schnelle Antwort. Genau das was ich suchte.
    Was hältst Du von meinem ersten kleinen WPF-Programm?

    Gruss
    Murmeli81

    *Anhang gelöscht da bin Ordner mit exe vorhanden* ~NoFear23m

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Hallo

    Leider musste ich deinen Anhang löschen da die Assembly vorhanden war.
    Am besten gehst du vor dem Upload in VisualStudio auf "Bereinigen" oder löscht manuell den bin Ordner da es im Forum nicht erlaubt ist kompilierte Assemblys hochzuladen. Zumindest nicht in diesem Bereich.

    Wenn es dir darum geht das ich oder vieleicht auch andere mal "drüberschaun" und du Feedback bekommst mach das am besten überhaupt hier.
    Falls es noch keine "fertige" App ist dann am besten in einem neuen Thread im WPF Bereich damit wir diesen Thread sauberhalten.
    Ich schau dann gerne mal drüber und gebe Feedback. Schreib vieleicht auch dazu falls es dir um Feedback über spezielle bereiche oder spezielle Dinge geht oder um das Gesamtpaket.

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo!

    Ich bin neu auf diesem Forum und beschäftige mich seid ca. 1 Monat, angetrieben durch einen sehr guten Freund( @florian03 ^^ ), mit der WPF.
    Ich muss mich erstmal für das super Tutorial von dir bedanken - Sascha - , dadurch lerne ich sehr viel. Großes Lob von mir!


    Ich habe nun schon das Kapitel Styles, Templates und Trigger durchgearbeitet und habe dazu eine Frage.

    Wie organisiere ich Styles am besten.
    Damit meine ich,dass wenn ich ein RessourceDictonary angelegt habe, wo Styles für Buttons, Textboxen, etc. drinnen sind, wo speichere ich dieses dann.
    Und wie "verknüpfe" ich dann die einzelne Dateien mit dieser Ressource Datei?

    Ach ja, gibt es auch eine Möglichkeit, diese Datei während der Verwendung der Anwendung "auszutauschen", wenn ein Benutzer z.B: einen Dunklen Hintergrund haben will?

    LG
    Arhant aka LaggyNacho
    Hallo @LaggyNacho und erstmal ein herzliches Willkommen im Forum

    Tja, für diese Frage gibt es nicht "die eine" Antwort. Ich selbst mache es gerne so das ich erstmal ein ResourceDictionary anlegen wo die ganzen "Default-Styles" reinkommen. (Ich mache für solche Dinge immer einen Unterordner in der Solution wie z.b. "Resources"). Hier kommen alle Styles rein wie der Default-Style für einen Button oder eine TextBox, aber genauso für ein Panel oder ein Window. Da werden Werte wie Margin, Background usw. definiert.

    Für spezielle Styles welche wieder die Default-Styles überschreiben, z.b. weil ich einen Button nun wieder anders aussehen lassen möchte wie alle anderen packe ich fast immer in ein eigenes ResourceDictionary und benamse dieses entsprechend. Z.b. mit RedAlertButtonDictionary. Und das Style dann RedAlertButtonStyle.

    Zum einbinden der jeweiligen Resource gibt es genauso mehrere Wege.
    Wenn du ein Style wie z.b. deine ganzen "DefaultStyles" innerhalb der ganzen Anwendung benötigst dann bindest du diese am besten in der App.xaml ein.

    XML-Quellcode

    1. <Application.Resources>
    2. <ResourceDictionary>
    3. <ResourceDictionary.MergedDictionaries>
    4. <ResourceDictionary Source="DefaultStyles.xaml" />
    5. </ResourceDictionary.MergedDictionaries>
    6. </ResourceDictionary>
    7. </Application.Resources>


    Du kannst natürlich innerhalb eines ResourceDictionary auf diese weise auch weitere Resourcenfiles einbinden und diese werden dann mitgeladen.

    Benötigst du innerhalb eines Window z.b. ein weiteres ResourceDictionary wie das RedAlertButtonDirctionary dann machst du das wie in der App.xaml nur eben innerhalb des Window, des UserControls oder wo auch immer.

    LaggyNacho schrieb:

    Ach ja, gibt es auch eine Möglichkeit, diese Datei während der Verwendung der Anwendung "auszutauschen", wenn ein Benutzer z.B: einen Dunklen Hintergrund haben will?


    Ja, die möglichkeit gibt es auch. Das nennt sich Theming.
    Schau diesbezüglich mal hier vorbei. Ich würde aber sagen vorher sollte der rest mal "sitzen".

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo nochmal!

    Nofear23m schrieb:

    Wenn du ein Style wie z.b. deine ganzen "DefaultStyles" innerhalb der ganzen Anwendung benötigst dann bindest du diese am besten in der App.xaml ein.

    Vielen Dank, genau danach habe ich gesucht, da sind die Styles bei allen Dateien verfügbar.

    Nofear23m schrieb:

    Ja, die möglichkeit gibt es auch. Das nennt sich Theming.
    Schau diesbezüglich mal hier vorbei. Ich würde aber sagen vorher sollte der rest mal "sitzen".

    Das sieht noch sehr kompliziert aus, da kümmere ich mich erstmal um das andere.

    Vielen Dank für die super schnelle Antwort!

    LG
    Arhant aka LaggyNacho
    Hallo Sascha,

    vielen Dank fuer die muehe und die Zeit die du aufwendest fuer dieses Tutorial. Es ist fuer mich als Anfaenger sehr leicht und gut zu verstehen.
    Werden demnaechst wieder Videos kommen?
    Ich weiss nicht ob das schon mal behandelt wurde aber kannst du mir bitte sagen welche Bedeutung "$" in folgendem kontext hat.

    VB.NET-Quellcode

    1. Return $"Marke: {Marke }, Modell: {Modell } Leistung: {PS }"


    Lg

    Andy
    Hallo @andydan

    andydan schrieb:

    Werden demnaechst wieder Videos kommen?

    Erstmal danke für die Blumen und dein interesse an der Tutorialreihe.

    Natürlich tut es mir leid das ich in letzter Zeit nichts gemacht habe, ich weis das einige Warten und es euch in der Fingern juckt weiter zu machen. Ich hatte in den letzten Monaten weniger Zeit und die verbleibende Zeit ging in andere laufende Projekte. Ich bin mit meinem Po einfach auf zu vielen Hochzeiten. hinzu kommt das ich die letzten Monate wenig Bock aufs Programmieren hatte was sich aber zum Glück wieder bessert. Die Phasen hat man einfach.

    Ich werde aber sicher die nächsten Wochen wieder weitermachen. Das Projekt ist auf keinen Fall gestorben.

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Editieren geht, neu anlegen und löschen nicht :-(

    Edit2: Hab mein Problem gefunden. Ich hatte die ItemsSource für das ItemsControlPersons nicht auf PersonList (welches die ObservableCollection ist), sondern noch auf persList (welches den ersten Eintrag initialisiert). Mit der ItemsSource auf PersonList gehts ohne INotifyPropertyChanged. (Ich dummerchen habs übersehen ;( )
    Aber vielleicht kann mir jemand sagen warum ich als HeaderText nicht nur den Namen sondern "System.Windows.Controls.Label: Kontakte" angezeigt bekomme und nicht nur "Kontakte", wenn der entsprechende Reiter ausgewählt wurde. In meiner VB-Version funktioniert die Bindung zum SelectedItem.Header.


    Hallo ich bin begeistert über dieses Tutorial. Sehr gute Arbeit bis
    hierher. Habe noch kein Tutorial gefunden das es für mich so
    verständlich und Detailreich erklärt
    . Ich muss dazu sagen das ich kein VB'ler bin sondern vorranging in C#
    programmiere und Anfänger bin. Aber bisher habe ich jeden Codeschnipsel
    nach C# von mir aus übersetzen können, was mich selbst ein bisschen
    stolz macht. Ich glaube so ist der Lerneffekt noch ein stückchen größer.

    Ich
    habe nur bei dem Thema "Einträge editieren und hinzufügen" ein Problem.
    Wenn ich den Code so schreibe wie im Tutorial, dann aktualisiert sich
    die View bei mir nicht. Die Einträge werden aber gelöscht und wieder
    hinzugefügt, das sehe ich in der Überwachung der ObservableCollection.
    Selbst wenn ich alles in VB schreibe funktionierts bei mir nicht.

    Wenn
    ich an die Properties in der Klasse Person das NotifyPropertyChanged
    dranhänge, dann kann ich dien Einträge editieren und die View
    aktualisiert sich. Jedoch löschen und neue Einträge hinzufügen
    funktioniert nicht bei mir. Ich hänge mal den Code der
    EditPerson.xaml.cs und der MainWindow.xaml.cs an:

    MainWindow.xaml.cs

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Collections.ObjectModel;
    4. using System.Windows;
    5. using System.Windows.Controls;
    6. using System.Windows.Input;
    7. namespace Telefonbuch__ohne_Binding_
    8. {
    9. public partial class MainWindow : Window
    10. {
    11. public MainWindow()
    12. {
    13. InitializeComponent();
    14. }
    15. public List<Model.Person> persList = new List<Model.Person>();
    16. private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    17. {
    18. Model.Person pers1 = new
    19. Model.Person(Model.EnuSalutation.Mister, "Kevin", "Hennen", null, new
    20. DateTime(1988, 3, 24), new List<Model.Contact>() {
    21. new
    22. Model.Contact("kelujoan@gmail.com", Model.EnuContactType.MailPrivate),
    23. new
    24. Model.Contact("hennen.kevin@thyssen-krupp.com",
    25. Model.EnuContactType.MailBusiness),
    26. new Model.Contact("+49 176 204 79 162",
    27. Model.EnuContactType.PhoneMobile)
    28. })
    29. {
    30. IsFavorite = true,
    31. Image =
    32. "https://scontent-dus1-1.xx.fbcdn.net/v/t1.0-1/cp0/p40x40/18839281_1560104847395514_5675008609601276236_n.jpg?_nc_cat=109&_nc_sid=dbb9e7&_nc_ohc=77aJezxVmEIAX8toHBn&_nc_ht=scontent-dus1-1.xx&oh=b7f63723c188c00fa543d4b81dded37e&oe=5F41C739"
    33. };
    34. persList.Add(pers1);
    35. PersonList = new ObservableCollection<Model.Person>(persList);
    36. ItemsControlPersons.ItemsSource = persList;
    37. uclTopBar.btnAddPerson.Click += AddPerson_Clicked;
    38. }
    39. private void AddPerson_Clicked(object sender, RoutedEventArgs e)
    40. {
    41. EditPerson persWin = new EditPerson
    42. {
    43. CurrentPerson = new Model.Person()
    44. };
    45. if (persWin.ShowDialog() == true)
    46. {
    47. PersonList.Add(persWin.CurrentPerson);
    48. }
    49. }
    50. public ObservableCollection<Model.Person> PersonList { get; set; }
    51. private void Person_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    52. {
    53. ListBoxItem li = (ListBoxItem)sender;
    54. if(li.DataContext != null && li.DataContext.GetType() == typeof(Model.Person))
    55. {
    56. EditPerson persWin = new EditPerson
    57. {
    58. CurrentPerson = (Model.Person)li.DataContext
    59. };
    60. if (persWin.ShowDialog() == true)
    61. {
    62. PersonList.Remove(persWin.CurrentPerson);
    63. if (!persWin.ShouldDelete)
    64. {
    65. PersonList.Add(persWin.CurrentPerson);
    66. }
    67. }
    68. }
    69. else
    70. {
    71. throw new Exception("Der DatenContext war falsch.");
    72. }
    73. }
    74. }
    75. }


    EditPerson.xaml.cs

    C#-Quellcode

    1. using System;
    2. using System.ComponentModel;
    3. using System.Runtime.CompilerServices;
    4. using System.Windows;
    5. using Telefonbuch__ohne_Binding_.Model;
    6. namespace Telefonbuch__ohne_Binding_
    7. {
    8. public partial class EditPerson : Window, INotifyPropertyChanged
    9. {
    10. private Person _currentPerson;
    11. public Person CurrentPerson { get { return _currentPerson; } set { _currentPerson = value; OnPropertyChanged(); } }
    12. public bool ShouldDelete { get; set; }
    13. public EditPerson()
    14. {
    15. InitializeComponent();
    16. }
    17. private void EditPerson_Loaded(object sender, RoutedEventArgs e)
    18. {
    19. var salutationList = Enum.GetValues(typeof(Model.EnuSalutation));
    20. cmbSalutation.ItemsSource = salutationList;
    21. cmbSalutation.SelectedItem = CurrentPerson.Salutation;
    22. txtVorname.Text = CurrentPerson.FirstName;
    23. txtNachname.Text = CurrentPerson.LastName;
    24. txtImagePath.Text = CurrentPerson.Image;
    25. DatePickerBirthday.SelectedDate = CurrentPerson.Birthday;
    26. chkIsFavorite.IsChecked = CurrentPerson.IsFavorite;
    27. txtGroup.Text = CurrentPerson.Group;
    28. txtNote.Text = CurrentPerson.Notes;
    29. }
    30. private void BtnSave_Click(object sender, RoutedEventArgs e)
    31. {
    32. CurrentPerson.Salutation = (Model.EnuSalutation) cmbSalutation.SelectedItem;
    33. CurrentPerson.FirstName = txtVorname.Text;
    34. CurrentPerson.LastName = txtNachname.Text;
    35. CurrentPerson.Image = txtImagePath.Text;
    36. CurrentPerson.Birthday = (DateTime)DatePickerBirthday.SelectedDate;
    37. CurrentPerson.IsFavorite = (bool)chkIsFavorite.IsChecked;
    38. CurrentPerson.Group = txtGroup.Text;
    39. CurrentPerson.Notes = txtNote.Text;
    40. DialogResult = true;
    41. }
    42. private void BtnSave_Delete(object sender, RoutedEventArgs e)
    43. {
    44. if(MessageBox.Show("Wirklich löschen?", "Löschen?",
    45. MessageBoxButton.OKCancel,MessageBoxImage.Warning) ==
    46. MessageBoxResult.OK)
    47. {
    48. ShouldDelete = true;
    49. DialogResult = true;
    50. }
    51. }
    52. public event PropertyChangedEventHandler PropertyChanged;
    53. private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    54. {
    55. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    56. }
    57. }
    58. }


    Wenn es helfen sollte stelle ich auch noch die gesamte von mir erstellte Solution hier ein. Allerdings sind dort noch die Properties in der Klasse Person.

    Edit: Hab gerade gesehen, dass ich das INotifyPropertyChanged in der Klasse Person implementiert hatte (auch in der angehängten Solution noch so drin). Natürlich habe ich dies in die ModelBase verschoben ;)

    Wann solls denn weitergehen mit der Tutorialreihe?? Bin schon ganz gespannt auf das MVVM-Pattern :)

    Dateien

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „kaevuen“ ()

    Hallo

    Erstmal danke für das Lob. Ich werde nun in Zukunft auch wieder etwas Zeit finden hier weiter zu machen.
    Aber dein Post zeigt mir wiedermal das ich die Kapitel OHNE Binding wieder löschen und aus dem Inhaltsverzeichnis entfernen werde. Das hat keinen Sinn und verleitet nur zum "Falschmachen".
    Ohne Binding müsstest du alles manuell nachführen. Aber das ist am Ziel vorbei. Gerade in deinem Fall wo du ja ohnehin eine ObservableCollection verwendest ist es ja Ideal wenn man das ItemsControl direkt bindet.

    Ändere folgendes und es funktioniert:

    In der CodeBehind bindest du die Codebehind an die View. Also am ende der MainWindow_Loaded Methode ein: this.DataContext = this; und dafür die Zeile mit ItemsControlPersons.ItemsSource = persList; entfernen.

    Und in XAML kannst du nun sogar den Namen des ItemsControl entfernen um sicher zu gehen das du es nicht woanders direkt verwendest, denn dann hätte dies Kompilerfehler zur folge.
    Und dann bindest du die Eigenschaft ItemsSource an deine PersonList Collection.

    Also wird das ItemsControl wie folgt geändert:

    XML-Quellcode

    1. <ItemsControl HorizontalContentAlignment="Stretch" ItemsSource="{Binding PersonList}">
    2. <ItemsControl.Resources>
    3. <DataTemplate DataType="{x:Type model:Person}">
    4. <ListBoxItem MouseLeftButtonUp="Person_MouseLeftButtonUp">
    5. <local:uclPersonListItem/>
    6. </ListBoxItem>
    7. </DataTemplate>
    8. </ItemsControl.Resources>
    9. </ItemsControl>

    folgendes:

    XML-Quellcode

    1. <ItemsControl HorizontalContentAlignment="Stretch" ItemsSource="{Binding PersonList}">
    2. <ItemsControl.Resources>
    3. <DataTemplate DataType="{x:Type model:Person}">
    4. <ListBoxItem MouseLeftButtonUp="Person_MouseLeftButtonUp">
    5. <local:uclPersonListItem/>
    6. </ListBoxItem>
    7. </DataTemplate>
    8. </ItemsControl.Resources>
    9. </ItemsControl>


    Wenn du noch Fragen hast tuh dir keinen Zwang an.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##