Как отобразить 365-дневный календарь в WPF

#c# #wpf

#c# #wpf

Вопрос:

Я должен показать все 365 дней в дневнике событий (это должно быть 365 дней, у меня нет выбора).

Изначально приложение было в winforms, в нем было 12 DataGridView, по одному на каждый месяц, с одной маленькой текстовой строкой на каждый день до 31 строки. Нам (только что) удалось вывести все это на экран (это было сделано в двух строках, т. е. с января по июнь в топ-6 DGV, с июля по декабрь в топ-6 DGV).

Мне нужно перенести проект на WPF.

Мой вопрос касается скорости, версия winforms была не слишком быстрой, мне интересно, какой наилучший подход к макету и БД для этого приложения, т. е. дополнительная информация —

  • В качестве базы данных diary используется T-SQL
  • Не во все дни есть что отображать (т. Е. нет прямой привязки для текста day-> db day enrty)
  • Записи базы данных содержат дату и описание события (описание — это то, что мне нужно отобразить)
  • Типичный дневник содержит около 150 записей для отображения

Приветствуется любая помощь

Ответ №1:

На самом деле не могу вам сильно помочь со стороны макета, однако мне потребовалось реализовать что-то очень похожее в silverlight, и это решение, которое я использовал, сработало довольно хорошо.

1. Внедрите изолированное хранилище на стороне приложения, оно используется в качестве кэша дневника

2. На стороне базы данных вы должны хранить данные в виде типа данных XML

3. Когда пользователь входит в систему, немедленно отобразите содержимое кэша дневника, чтобы не было ожидания

4. Далее немедленно запустите фонового рабочего, который связывается с базой данных и получает последнюю актуальную информацию о дневнике

5. После завершения фоновой работы проверьте, отличаются ли данные за какой-либо день из базы данных от данных, хранящихся в локальном кэше, если да, обновите графический интерфейс и локальный кэш

6. Запускайте фоновый рабочий процесс каждые 5 минут, следуя шагам 4 и 5 по мере необходимости

Комментарии:

1. Некоторые хорошие моменты, особенно 4 и 5, действительно ценят вклад. Что касается скорости, то, по-видимому, лучше всего использовать ObservableCollection<T>, что я и сделал, я также воспользовался вашим предложением использовать BackgroundWorker для его периодического обновления. Что касается макета, я понятия не имею, поэтому я просто придерживаюсь стандартного шаблона данных в ListView (по одному на каждый месяц, поскольку я считаю, что это лучше — т. Е. Привязка ко многим объектам с меньшим количеством свойств, как описано в msdn.microsoft.com/en-us/library/bb613546.aspx )