Binden an ViewModelProperty im GroupHeader

  • WPF

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    Binden an ViewModelProperty im GroupHeader

    Hallo,
    ich verzweifele gerade an einem GroupHeader DataTemplate.
    Ich gruppiere eine Liste:

    XML-Quellcode

    1. <CollectionViewSource x:Key="statCol" Source="{Binding EntryList, UpdateSourceTrigger=PropertyChanged}">
    2. <CollectionViewSource.GroupDescriptions>
    3. <PropertyGroupDescription PropertyName="FullName"/>
    4. </CollectionViewSource.GroupDescriptions>
    5. <CollectionViewSource.SortDescriptions>
    6. <componentModel:SortDescription PropertyName="PresentDays" Direction="Descending"/>
    7. </CollectionViewSource.SortDescriptions>
    8. </CollectionViewSource>


    FullName und PresentDays sind Properties im ItemViewModel der EntryList.

    im DatatTemplate möchte ich dies nun Anzeigen:

    XML-Quellcode

    1. <DataTemplate x:Key="GroupHeader">
    2. <StackPanel Orientation="Horizontal" >
    3. <TextBlock Text="{Binding Name}"
    4. FontSize="{StaticResource FontSizeAverage}"
    5. FontFamily="{StaticResource DefaultThin}"
    6. Margin="0,0,10,0"/>
    7. <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"/>
    8. <TextBlock Text="{Binding PresentDays, UpdateSourceTrigger=PropertyChanged, Converter={local:IntegerToStringConverter}}"
    9. FontSize="{StaticResource FontSizeAverage}"
    10. FontFamily="{StaticResource DefaultThin}"
    11. Margin="10,0,0,0"/>
    12. </StackPanel>
    13. </DataTemplate>


    Der Name wird auch Korrekt angezeigt und es wird danach gruppiert.
    Nun weis ich, das ich mit ItemCount die Anzahl der Einträge in der Gruppe bekomme.
    In diesem Fall nutzt mir dies leider nichts, weil die Einträge nochmals gruppiert werden. Dazu hat das ItemViewModel auch eine Liste der Einträge.

    Wie kann ich im GroupHeader denn auf das Property PresentDays binden?
    "Hier könnte Ihre Werbung stehen..."
    Hallo

    MichaHo schrieb:

    GroupHeader DataTemplate.



    In einem GroupHeader Template hast du eine andere Bindung. Deshalb klappt ja auch "ItemsCount" obwohl du dieses Property in deiner Klasse nicht hast.
    Es gibt natürlich mittels "FindAscestor" die möglichkeit darauf zu binden. Die Frage die sich mir stellt ist allerdings was dort angezeigt werden soll.

    Du hast eine Gruppe von Einträgen und willst auf eine Eigenschaft des Items in einem GroupHeader binden? Aber auf welches? Wenn in der Gruppe 10 Items sind von welchem Item soll denn der wert genommen werden.

    Wenn es so ist:

    MichaHo schrieb:

    FullName und PresentDays sind Properties im ItemViewModel der EntryList.

    Dann ist das ja in jedem Item, also was macht das im GroupHeader??

    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. ##

    Hi @Nofear23m
    Im Grunde ist es eine Liste der Mitglieder die Anwesend waren.
    Gruppiert wird nach dem Namen des Mitglieds.
    Innerhalb eines Mitglieds gibt es dessen Anwesendheitseinträge als Liste.
    Diese Liste wird wiederum nach Wochentag gruppiert und darin dann die Datumse an denen das Mitglied da war.
    Vielleicht als Bild klarer:


    da wo der rote Kringel ist, soll quasi die FesamtAnzahl der anwesenden Tage stehen.
    Die hole ich mir darüber das ich die Einträge der Anwesendheitsliste zähle:
    Hier die Klasse der Items in der Liste der EntryList:

    C#-Quellcode

    1. public class StatisticListItemViewModel : ViewModelBase
    2. {
    3. private readonly Person _personModel;
    4. public string FullName => _personModel.FullName;
    5. public int PresentDays => PresentEntries.Count;
    6. public ObservableCollection<StatisticListItemPresentItemViewModel> PresentEntries { get; set; }
    7. public StatisticListItemViewModel(Person person)
    8. {
    9. _personModel = person;
    10. GetEntries();
    11. }
    12. private ObservableCollection<StatisticListItemPresentItemViewModel> GetEntries()
    13. {
    14. var entryList = PeopleLogic.GetPersonPresentEntries(_personModel.Id);
    15. PresentEntries = new ObservableCollection<StatisticListItemPresentItemViewModel>();
    16. entryList.ForEach(item => PresentEntries.Add(new StatisticListItemPresentItemViewModel(item)));
    17. return PresentEntries;
    18. }
    19. }


    setze ich einen Haltepunkt, ist PresentDays auch richtigerweise 2.
    Diese 2 soll im roten Kringel angezeigt werden
    "Hier könnte Ihre Werbung stehen..."
    Ok, also ist das Property "PresentDay" in diesem Fall eh eine Klasse darüber.
    So kannst du dir beim Binden über FindAscestor den Datencontext holen den du brauchst (ich sehe ja keinen XAML) und darauf Binden.
    Gerade bei solche Konstellationen hilft ein DesignTime-Datenkontext ungemein.

    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. ##

    Hmm.... eine Klasse drüber? versteh ich nu nicht.
    Vielleicht mal von anfang an (vorsicht, wird vieeeel Code)
    Also, Es gibt ein StatistikListViewModel und dazu ein StatisticListControl
    Das ViewModel:
    Spoiler anzeigen

    C#-Quellcode

    1. public class StatisticListViewModel : ViewModelBase
    2. {
    3. public ObservableCollection<StatisticListItemViewModel> EntryList { get; set; }
    4. public StatisticListViewModel(PersonTypeEnum personType)
    5. {
    6. GetEntries(personType);
    7. }
    8. private ObservableCollection<StatisticListItemViewModel> GetEntries(PersonTypeEnum personType)
    9. {
    10. var entryList = PeopleLogic.GetPersons(personType,false);
    11. EntryList = new ObservableCollection<StatisticListItemViewModel>();
    12. entryList.ForEach(p => EntryList.Add(new StatisticListItemViewModel(p)));
    13. return EntryList;
    14. }
    15. }


    und das Control dazu:
    Spoiler anzeigen

    XML-Quellcode

    1. <UserControl x:Class="ShinzanDojo.StatisticListControl"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    6. xmlns:local="clr-namespace:ShinzanDojo"
    7. xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=WindowsBase"
    8. mc:Ignorable="d"
    9. d:DesignHeight="450" d:DesignWidth="800">
    10. <UserControl.Resources>
    11. <CollectionViewSource x:Key="statCol" Source="{Binding EntryList, UpdateSourceTrigger=PropertyChanged}">
    12. <CollectionViewSource.GroupDescriptions>
    13. <PropertyGroupDescription PropertyName="FullName"/>
    14. </CollectionViewSource.GroupDescriptions>
    15. <CollectionViewSource.SortDescriptions>
    16. <componentModel:SortDescription PropertyName="PresentDays" Direction="Descending"/>
    17. </CollectionViewSource.SortDescriptions>
    18. </CollectionViewSource>
    19. <DataTemplate x:Key="GroupHeader">
    20. <StackPanel Orientation="Horizontal" >
    21. <TextBlock Text="{Binding Name}"
    22. FontSize="{StaticResource FontSizeAverage}"
    23. FontFamily="{StaticResource DefaultThin}"
    24. Margin="0,0,10,0"/>
    25. <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"/>
    26. <TextBlock Text="{Binding PresentDays, Converter={local:IntegerToStringConverter},StringFormat=Gesamt: {0}}"
    27. FontSize="{StaticResource FontSizeAverage}"
    28. FontFamily="{StaticResource DefaultThin}"
    29. Margin="10,0,0,0"/>
    30. </StackPanel>
    31. </DataTemplate>
    32. </UserControl.Resources>
    33. <ScrollViewer>
    34. <ItemsControl ItemsSource="{Binding Source={StaticResource statCol}}">
    35. <ItemsControl.GroupStyle>
    36. <GroupStyle HeaderTemplate="{StaticResource GroupHeader}"
    37. ContainerStyle="{StaticResource ListBoxGroupStyle}"/>
    38. </ItemsControl.GroupStyle>
    39. <ItemsControl.ItemTemplate>
    40. <DataTemplate>
    41. <local:StatistikListItemControl/>
    42. </DataTemplate>
    43. </ItemsControl.ItemTemplate>
    44. </ItemsControl>
    45. </ScrollViewer>
    46. </UserControl>


    Das StatistikViewModel hält quasi eine Liste aller Mitglieder (anhand des Typs, ob es die Erwachsenen oder Kinder sind)

    Das StatistikListItemViewModel und sein Control:
    Spoiler anzeigen

    C#-Quellcode

    1. public class StatisticListItemViewModel : ViewModelBase
    2. {
    3. private readonly Person _personModel;
    4. public string FullName => _personModel.FullName;
    5. private int _presentDays;
    6. public int PresentDays { get => _presentDays; set => SetValue(ref _presentDays, value); }
    7. public ObservableCollection<StatisticListItemPresentItemViewModel> PresentEntries { get; set; }
    8. public StatisticListItemViewModel(Person person)
    9. {
    10. _personModel = person;
    11. GetEntries();
    12. PresentDays = PresentEntries.Count;
    13. }
    14. private ObservableCollection<StatisticListItemPresentItemViewModel> GetEntries()
    15. {
    16. var entryList = PeopleLogic.GetPersonPresentEntries(_personModel.Id);
    17. PresentEntries = new ObservableCollection<StatisticListItemPresentItemViewModel>();
    18. entryList.ForEach(item => PresentEntries.Add(new StatisticListItemPresentItemViewModel(item)));
    19. return PresentEntries;
    20. }
    21. }


    das Control dazu:
    Spoiler anzeigen

    XML-Quellcode

    1. <UserControl x:Class="ShinzanDojo.StatistikListItemControl"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    6. xmlns:local="clr-namespace:ShinzanDojo"
    7. xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=WindowsBase"
    8. mc:Ignorable="d"
    9. d:DesignHeight="450" d:DesignWidth="800">
    10. <UserControl.Resources>
    11. <CollectionViewSource x:Key="statCol" Source="{Binding PresentEntries, UpdateSourceTrigger=PropertyChanged}">
    12. <CollectionViewSource.GroupDescriptions>
    13. <PropertyGroupDescription PropertyName="WeekDay"/>
    14. </CollectionViewSource.GroupDescriptions>
    15. <CollectionViewSource.SortDescriptions>
    16. <componentModel:SortDescription PropertyName="WeekDay"/>
    17. </CollectionViewSource.SortDescriptions>
    18. </CollectionViewSource>
    19. <DataTemplate x:Key="GroupHeader">
    20. <StackPanel Orientation="Horizontal" >
    21. <TextBlock Text="{Binding Name, Converter={local:DayofWeekToStringConverter}}"
    22. FontSize="{StaticResource FontSizeAverage}"
    23. FontFamily="{StaticResource DefaultThin}"
    24. Margin="0,0,20,0"/>
    25. <TextBlock Text="{Binding ItemCount, Mode=OneWay, Converter={local:IntegerToStringConverter}}"
    26. FontSize="{StaticResource FontSizeAverage}"
    27. FontFamily="{StaticResource DefaultThin}"
    28. Margin="0,0,5,0"/>
    29. </StackPanel>
    30. </DataTemplate>
    31. </UserControl.Resources>
    32. <Border Padding="10" BorderBrush="{DynamicResource DarkBrush}" BorderThickness="0.5">
    33. <ItemsControl ItemsSource="{Binding Source={StaticResource statCol}}" >
    34. <ItemsControl.GroupStyle>
    35. <GroupStyle HeaderTemplate="{StaticResource GroupHeader}"
    36. ContainerStyle="{StaticResource ListBoxGroupStyle}"/>
    37. </ItemsControl.GroupStyle>
    38. <ItemsControl.ItemTemplate>
    39. <DataTemplate>
    40. <local:StatisticListItemPresentItemControl/>
    41. </DataTemplate>
    42. </ItemsControl.ItemTemplate>
    43. </ItemsControl>
    44. </Border>
    45. </UserControl>


    Das StatistikListItemViewModel hält nun den Namen der Person und eine Liste seiner Anwesenheitseinträge.
    Dann gibt es das StatistikListItemPresentItemViewModel und ein Control dazu:
    Spoiler anzeigen

    C#-Quellcode

    1. public class StatisticListItemPresentItemViewModel : ViewModelBase
    2. {
    3. private readonly PresentEntry _presentEntryModel;
    4. public DayOfWeek WeekDay => _presentEntryModel.Date.DayOfWeek;
    5. public DateTime PresentDate => _presentEntryModel.Date;
    6. public DateTime CheckIn => _presentEntryModel.CkeckIn;
    7. public DateTime CheckOut => _presentEntryModel.CheckOut;
    8. public StatisticListItemPresentItemViewModel(PresentEntry presentEntry)
    9. {
    10. _presentEntryModel = presentEntry;
    11. }
    12. }

    Und das Control dazu:
    Spoiler anzeigen

    XML-Quellcode

    1. <UserControl x:Class="ShinzanDojo.StatisticListItemPresentItemControl"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    6. xmlns:local="clr-namespace:ShinzanDojo"
    7. xmlns:res="clr-namespace:MHoApps.NetCore.Resources;assembly=MHoApps.NetCore.Resources"
    8. mc:Ignorable="d"
    9. d:DesignHeight="450" d:DesignWidth="800">
    10. <StackPanel Orientation="Horizontal" Margin="10">
    11. <TextBlock Text="{Binding PresentDate, Converter={local:DateTimeToDisplayDateConverter},StringFormat=Datum: {0}}"
    12. FontSize="{StaticResource FontSizeAverage}"
    13. FontFamily="{StaticResource DefaultBold}"
    14. Foreground="{DynamicResource LightDarkBrush}"/>
    15. </StackPanel>
    16. </UserControl>


    Der Wunsch des Trainers ist, in der Statistik nicht nur zu sehen wie oft einer da war, sondern zusätzlich wie oft an welchen Wochentagen und dann eben noch das Datum des entsprechenden Wochentags.
    Er brauch das aus Versicherungstechnischen Gründen.
    "Hier könnte Ihre Werbung stehen..."
    Hallo

    Sorry, gerade habe ich nicht die Möglichkeit den Code im einzelnen durchzugehen, aber wie gesagt musst du dir nur den richtigen Datenkontext holen.
    Warum hast du keinen Designtime-Support eingebaut? Das hilft dir doch enorm und du kannst wunderbar das Eigenschaftenfenster für Binding-Picking verwenden!
    So kannst du mit ein paar Klicks wunderbar binden.

    So aus ein Codeteilen ist es auch für mich schwierig hier eine Lösung bekannt zu geben.

    MichaHo schrieb:

    eine Klasse drüber? versteh ich nu nicht.

    Damit meine ich das das Property welches du im Header der Gruppe anzeigen willst nicht in den Items der Gruppe sondern in der darüber liegenden Klasse ist.

    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. ##

    DesignTime Support muss ich mal einbauen. ich hatte in einem anderen Projekt allerings das Problem, das mir der Designer ständig abgeraucht sit, deswegen hatte ich es hier in dem Projekt gelassen.

    Nofear23m schrieb:

    Damit meine ich das das Property welches du im Header der Gruppe anzeigen willst nicht in den Items der Gruppe sondern in der darüber liegenden Klasse ist.


    Aber PresentDays ist doch ein ind den Items der Gruppe... Die Gruppe ist EntryList und jeder Eintrag in EntryList hat PresentDays...
    "Hier könnte Ihre Werbung stehen..."
    Und in dieser Auflistung ist wiederum die Auflistung PresentEntries und diese wird ja Gruppiert richtig?
    Also ist das Property ja ausserhalb der Items welche Gruppiert werden oder sehe ich das falsch? Falls nicht würde es KEINEN Sinn machen auf das zu Binden. würde auch nicht klappen.

    Falls es dir nichts ausmacht, mach doch ein kleines Miniprojekt wo dieselbe anzahl an Verschachtellungen vorhanden ist. Ohne viel Schnickschnack, dann baue ich dir das gerne ein.

    Aber du musst verstehen, gerade bei komplexeren Binding ist es schwierig rein "aus dem kopf" zu binden.

    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. ##

    Verwirrend ist vielleicht das es 2 Gruppierungen sind. Einmal die EntryList -> gruppiert nach Name und einmal die PresentEntries -> Gruppiert nach Wochentag.
    Ich bastel da mal gerade was zusammen....
    "Hier könnte Ihre Werbung stehen..."
    Ich hab es geschafft, am Ende war es doch eigentlich einfach.

    XML-Quellcode

    1. <TextBlock Text="{Binding Items[0].PresentDays, Converter={local:IntegerToStringConverter},StringFormat=Gesamt: {0}}"
    2. FontSize="{StaticResource FontSizeAverage}"
    3. FontFamily="{StaticResource DefaultThin}"
    4. Margin="10,0,0,0"/>

    Ich binde an das erste Item und hole davon die PresentDays
    "Hier könnte Ihre Werbung stehen..."
    OK, ich habe mir das angesehen. Du versuchst ja wirklich auf ein Property der Auflistung zu binden. Wie stellst du dir das vor?

    OK, es geht schon, aber nur durch wirklich ungünstige Umwege, für sowas ist eine Gruppierung nicht da und geht an dem Sinn vorbei.
    Mach es dir nicht so schwer. Hast du als vorgabe das die UX so von statten gehen soll? Da kenn ich dich nämlich kreativer. 8-)

    Warum denn kein Master/Detail View? Viel übersichtlicher und felxibler in der gestaltung oder?
    Falls du es wirklich so machen willst kann ich mal sehen ob ich dir einen Converter mache, aber das wird sicher unschön, denn wie gesagt - das geht an dem Sinn einer Gruppierung vorbei.

    Grüße
    Sascha

    EDIT: Ja, die Lösung geht auch, aber echt unschön. Sobald du zwei gleiche Namen hast erlebst du dein blaues Wunder!!
    Wie gesagt, ruppierung ist für eben was anderes!!
    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. ##

    Ja Du hast Recht... bisher gibt es zwar keine 2 gleichen Namen (also Fullname Nachname, Vorname) aber kann ja durchaus mal passieren.
    Ich werd dann doch eher eine weitere Page einbauen wo die Anwesenheiten aufgelistet werden, diese kann ich ja dann nach Trainingstag gruppieren.

    Danke Dir für den Denkanstoß...

    Eine andere Frage hätte ich noch weil ich grad nicht drauf komme:
    Die Person hat ja eine Liste von PresentEntries... wenn ich jetzt einen Eintrag aus der Liste löschen will und gleichzeitig soll der dazugehörende Datensatz in der von EFCore angelegten Tabelle gelsöcht werden, wie geht man da vor?

    ich ahtte dies versucht:

    C#-Quellcode

    1. private void Remove()
    2. {
    3. _personModel.PresentEntries.Remove(_personModel.PresentEntries.Last());
    4. if (PeopleLogic.UpdatePerson(_personModel))
    5. {
    6. PresentPersons.Remove(this);
    7. }
    8. }

    das :personModel wird richtig upgedatetd, aber der Eintrag aus der Tabelle, die EF Core anglegt verschwindet nicht.
    Muss ich mir die Tabelle doch selbst anlegen und dann den Datensatz raus schmeißen?
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    gleichzeitig soll der dazugehörende Datensatz in der von EFCore angelegten Tabelle gelsöcht werden, wie geht man da vor?

    Am besten konfiguriert man hierfür CascadeDelete. In diesem Fall macht der SQL Server alles weitere von selbst.

    Grüße
    Sascha

    Edit: Du kannst ja wenn du willst auch bei deinem Design bleiben, aber eben nicht mittels Grouping sondern das du es selbst im ViewModel regelst. als die Sturktur einfach im ViewModel so abbildest wie es im View aussehen soll.
    Nur eben nicht das Grouping auf ein Property wie einen Namen.

    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. ##

    Nofear23m schrieb:

    Edit: Du kannst ja wenn du willst auch bei deinem Design bleiben, aber eben nicht mittels Grouping sondern das du es selbst im ViewModel regelst. als die Sturktur einfach im ViewModel so abbildest wie es im View aussehen soll.
    Nur eben nicht das Grouping auf ein Property wie einen Namen.



    Ja, das ginge ja auch, aber.... ich hab ja eh in der AdminMainView eine Liste aller Personen die nicht deaktiviert sind und dort kann ich je Person entweder editieren, oder die Graduierungshistorie ansteuern.
    Hier bau ich einfahc noch einen Button rein, der mir dann die PresentEntries der Person anzeigt, die dann gruppiert nach Trainingstag... ich denke das ist auch für den Trainer einfacher.
    die Übersicht sieht so aus:

    Manchmal muss halt jemand aussenstehender drüber gucken, dann fällt einem selbst auf das man Blödsinn baut :D
    Danke Dir. Cascade guck ich mir an ob SQLite das auch kann.
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Manchmal muss halt jemand aussenstehender drüber gucken, dann fällt einem selbst auf das man Blödsinn baut

    Glaub mir, ich kenne das nur zu gut. Man bastelt dran rum und probiert hier und da, plötzlich kommt man drauf das hier gerade ne vollkommen dumme Benutzerführung entsteht.

    Deshalb habe ich in "echten" Projekten, also solchen die an Enduser rausgehen schon lange angefangen mir wirklich vorher Skizzen zu machen. Oldschool mit nem Bleistift und nem Blatt Papier einfach nen Grundriss von dem was am ende rauskommen soll, und zu dem denke ich mir dann wie der User das nun bedienen soll. Also wo er klickt und was er dann sieht usw.
    Da merkt man zum einen schnell wenn das Konzept nicht stimmt und zum anderen hat man damit die 1A Vorlage für sein ViewModel. Anhand dieser Skizze erstelle ich dann das ViewModel.
    Erst wenn das ViewModel fertig ist baue ich es in XAML. (Gut, ich habe den Vorteil das ich meißt UnitTests habe und somit weis das mein ViewModel funktioniert aber es geht natürlich auch ohne.)

    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. ##

    @Nofear23m Danke Dir für Deinen Input...
    Ja, das mit den Zeichnungen mache ich auch hin und wieder, ich hatte auch schon mal nach Programmen gesucht, mit denen ich WPF Oberflächen zeichnen könnte damit man real sieht wie es auseehen könnte, bin aber noch auf kein anständiges gestoßen.

    Design und aussehen ist auch das, wo ich mich am allerlängsten dran aufhalte...

    Ich hab übrigens gestern noch die Anzeige der Anwesenden Trainings umgebaut und nun sieht es tatsächlich besser aus. Danke Dir.
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    bin aber noch auf kein anständiges gestoßen.

    Wie gesagt mach ich das immer mit Skizzen, aber wenn du "Real" was sehen willst dann einfach ne leere WPF App und dort schlicht mit dem Designer alles draufklatschen. Da kannst du dann ja auch ohne Grid,, Stackpanel usw. arbeiten - geht also schnell. Auch das Daten in den Controls enthalten sind ist ja kein Problem, kannst du direkt im XAML Designer alles eingeben.

    Probiers mal aus.

    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 wollte nur mal kurz nachfragen ob du nun eine gute UX gefunden hast? Nur aus interesse. Du weist ja wie das ist, andere schaun wieder mit einem anderen "Auge" drüber. ;)

    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. ##

    Hi,
    ähm, ja, mit UX meinst du das View um die PresentEntries anzuzeigen, richtig?
    ja, das hab ich nun auch als ZusatzButton in die PersonListe eingebaut. In der Page die dann angezeigt wird, werden die Einträge dann nach Wochentag gruppiert. Klappt super.
    wegen dem CasCade delete hab ich noch keine Lösung, deswegen stell ich erstmal das Deleted Flag auf true.

    bin aber die letzten 2 Tage dran, dein WPFNotes2 auf meine Umgebung zu übersetzen. Dabei wird mir jetzt auch einiges klar, was ich vorher falsch gemacht habe.
    "Hier könnte Ihre Werbung stehen..."