Группировка элементов в ListView

198
12 июля 2018, 17:10

Существует список ListView в котором должны отображаться элементы вида название / время, при этом все элементы должны быть сгруппированы по времени.

С выводом элементов проблем не возникло, но возникли проблемы с группировкой. В частности, при переходе на страницу заголовки группировки не отображаются, но после выбора одного из элемента - все заголовки становятся одинаковыми, а именно, во всех заголовках отображаются одни и те же даты. При выборе другого элемента, все заголовки соответственно меняются на дату выбранного элемента.

В чём может быть проблема? Привожу код с применением шаблона MVVM.

Модель:

public class MapEvent
{
    private string name;
    public string Name
    {
        get => name;
        set => name = value;
    }
    private DateTime start;
    public DateTime Start
    {
        get => start;
        set => start = value;
    }
}

ViewModel:

public class ScheduleViewModel
{
    private CollectionViewSource sortedCollection;
    public CollectionViewSource SortedCollection
    {
        get => sortedCollection;
        set
        {
            sortedCollection = value;
            OnPropertyChanged();
        }
    }
    public ScheduleViewModel()
    {
        using (MainDatabaseContext db = new MainDatabaseContext())
        {
            MapEvents = new ObservableCollection<MapEvent>(db.MapEvents
                    .OrderBy(i => i.Start)
                    .ToList());
            var groups = from i in MapEvents
                         group i by i.Start.ToLocalTime().Date;
            SortedCollection.Source = groups;
        }
    }
}

View:

<Page.Resources>
        <ResourceDictionary>
            <CollectionViewSource
                x:Key="cvs"
                IsSourceGrouped="True"
                Source="{x:Bind ViewModel.SortedCollection.Source, Mode=OneWay}" />
            <converters:FromNullableIntToIntConverter x:Key="fromNullableIntToIntConverter" />
        </ResourceDictionary>
    </Page.Resources>
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ListView
                        ItemsSource="{Binding Source={StaticResource cvs}, Mode=OneWay}"
                        SelectedIndex="{x:Bind ViewModel.SelectedMapEvent, Mode=TwoWay, Converter={StaticResource fromNullableIntToIntConverter}}"
                        <ListView.GroupStyle>
                            <GroupStyle>
                                <GroupStyle.HeaderTemplate>
                                    <DataTemplate>
                                        <TextBlock
                                            FontSize="30"
                                            FontWeight="SemiLight"
                                            Text="{Binding Source={StaticResource cvs}, Path=Start, Converter={StaticResource fromUtcToLocalTimeOnlyDateConverter}, Mode=OneWay}" />
                                    </DataTemplate>
                                </GroupStyle.HeaderTemplate>
                            </GroupStyle>
                        </ListView.GroupStyle>
</Grid>

Стоит отметить, что при переходе на страницу, в консоли отладки выдаются сообщения: Error: BindingExpression path error: 'Start' property not found on 'Windows.UI.Xaml.Data.ICollectionView'. BindingExpression: Path='Start' DataItem='Windows.UI.Xaml.Data.ICollectionView'; target element is 'Windows.UI.Xaml.Controls.TextBlock' (Name='null'); target property is 'Text' (type 'String')

READ ALSO
Как заполнить button grid&#39;ом из кода и заполнить его textblock&#39;ами?

Как заполнить button grid'ом из кода и заполнить его textblock'ами?

У меня создаются кнопки в окне cs приложения WPFЯ хочу взять одну из кнопок и заполнить ее одной буквой, но чтобы в правом верхнем еще был маленький...

222
Имя типа или пространства имен &ldquo;ServiceModel&rdquo; отсутствует в пространстве имен &ldquo;System&rdquo;

Имя типа или пространства имен “ServiceModel” отсутствует в пространстве имен “System”

Пытаюсь подключить CEFПри компиляции возникает вышеуказанная ошибка

155
Как совместить модули с разными ЯП?

Как совместить модули с разными ЯП?

Например: На c++ программа циклически считывает данные ожидая определенного событияКак только это событие произойдет должно высветиться...

180
Как проверить, что список содержит слово?

Как проверить, что список содержит слово?

У меня есть списокВ нем элементы вида: "_something":"",

158