Hi,
ich hab da ein Problemchen an dem ich nicht recht weiter komme (Knoten im Hirn)
Ich hab eine kleine Anwendung zur Zeiterfassung.
Nun möchte ich in einer Liste alle Zeiteinträge anzeigen, diese aber gruppiert nach dem jeweiligen Datum und dann in einem Expander die Einträge des Tages (Kommen, Pause, Gehen).
Wie ich die Daten im Expander anzeige habe ich schon raus gefunden, das sieht auch soweit super aus.
Nun habe ich im ViewModel quasi meine Observable Collection einfach per GroupBy auf das Datum Gruppiert und nahm an, das wenn ich diese Collection dann an das Items Control binde, ich eine Gruppierte Ansicht bekomme... naja, bekomm ich nicht....
Hier hab ich mal die entsprechenden XAML und ViewModel.
Das UserControl für die Liste:
Spoiler anzeigen
das dazugehörige ViewModel
Spoiler anzeigen
anbei noch ein Bildchen, wie es momentan aussieht, wie gesagt, ich hätte gerne pro Tag (also pro Datum) nur 1 Eintrag in der Liste und dann die anderen Einträge des Tage im Expander.
auch ein kurzer Auszug aus der DB.
Danke Euch für Eure Tips
Grüße
Micha
ich hab da ein Problemchen an dem ich nicht recht weiter komme (Knoten im Hirn)
Ich hab eine kleine Anwendung zur Zeiterfassung.
Nun möchte ich in einer Liste alle Zeiteinträge anzeigen, diese aber gruppiert nach dem jeweiligen Datum und dann in einem Expander die Einträge des Tages (Kommen, Pause, Gehen).
Wie ich die Daten im Expander anzeige habe ich schon raus gefunden, das sieht auch soweit super aus.
Nun habe ich im ViewModel quasi meine Observable Collection einfach per GroupBy auf das Datum Gruppiert und nahm an, das wenn ich diese Collection dann an das Items Control binde, ich eine Gruppierte Ansicht bekomme... naja, bekomm ich nicht....
Hier hab ich mal die entsprechenden XAML und ViewModel.
Das UserControl für die Liste:
XML-Quellcode
- <UserControl x:Class="TimeTracker.App.TimeTrackingListControl"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:local="clr-namespace:TimeTracker.App"
- xmlns:vm="clr-namespace:TimeTracker.ViewModel;assembly=TimeTracker.ViewModel"
- mc:Ignorable="d" d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True,Type={x:Type vm:TimeTrackingListViewModel}}"
- d:DesignHeight="450" d:DesignWidth="800">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <Border Grid.Row="0" BorderBrush="{DynamicResource OrangeBrush}" BorderThickness="0,0,0,0.5">
- </Border>
- <Border Grid.Row="1">
- <ScrollViewer VerticalScrollBarVisibility="Auto">
- <ItemsControl ItemsSource="{Binding TimeEntries}">
- <ItemsControl.ItemTemplate>
- <DataTemplate >
- <Border Margin="5" Padding="10" BorderBrush="{DynamicResource OrangeBrush}" BorderThickness="1">
- <StackPanel>
- <TextBlock FontFamily="{StaticResource DefaultBold}"
- FontSize="{StaticResource FontSizeLarge}"
- Foreground="{DynamicResource DarkBrush}"
- Text="{Binding StampTime, Converter={local:StampTimeToLongDateStringConverter}}"/>
- <Expander Header="Tages Einträge" Grid.Row="2" IsExpanded="False">
- <Border BorderBrush="{DynamicResource OrangeBrush}" BorderThickness="1" Margin="3" Padding="5">
- <StackPanel Orientation="Vertical">
- <local:TimeTrackingListItemControl />
- </StackPanel>
- </Border>
- </Expander>
- </StackPanel>
- </Border>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
- </ScrollViewer>
- </Border>
- </Grid>
- </UserControl>
das dazugehörige ViewModel
C#-Quellcode
- namespace TimeTracker.ViewModel
- {
- public class TimeTrackingListViewModel : ViewModelBase
- {
- private readonly TimeEntry _timeEntryModel;
- public ObservableCollection<TimeTrackingListItemViewModel> TimeEntries { get; set; }
- private TimeTrackingListItemViewModel _selectedTimeEntry;
- public TimeTrackingListItemViewModel SelectedTimeEntry { get => _selectedTimeEntry; set => SetValue(ref _selectedTimeEntry, value); }
- public TimeTrackingListViewModel()
- {
- ReloadData();
- InitializeCommands();
- }
- private void InitializeCommands()
- {
- }
- public TimeTrackingListViewModel(TimeEntry timeEntry)
- {
- _timeEntryModel = timeEntry;
- }
- private void ReloadData()
- {
- var timeEntryList = TimeTrackerLogic.GetPersonTimeEntries(IoC.Application.CurrentPersonId);
- TimeEntries = new ObservableCollection<TimeTrackingListItemViewModel>();
- timeEntryList.ForEach(t => TimeEntries.Add(new TimeTrackingListItemViewModel(t)));
- TimeEntries.GroupBy(t => t.StampTime.Date);
- SelectedTimeEntry = TimeEntries.FirstOrDefault();
- }
- }
- }
anbei noch ein Bildchen, wie es momentan aussieht, wie gesagt, ich hätte gerne pro Tag (also pro Datum) nur 1 Eintrag in der Liste und dann die anderen Einträge des Tage im Expander.
auch ein kurzer Auszug aus der DB.
Danke Euch für Eure Tips
Grüße
Micha
"Hier könnte Ihre Werbung stehen..."