C # 4.0 .net 4 и обновление пользовательского интерфейса WPF - PullRequest
1 голос
/ 16 апреля 2010

Я пытаюсь создать приложение для работы с сайтом, похожим на твиттер, и проблема, которую я пытаюсь решить, - Как я собираюсь обновить пользовательский интерфейс с фоновым рабочим и добавить только показывать последние сообщения (твиты, если хотите) поверх панели обтекания, не удаляя уже существующие?

в моей предыдущей попытке я сделал это, сохраняя твиты / сообщения в локальной базе данных SQlite, а затем извлекая последние 10 сообщений, в результате чего пользовательский интерфейс на некоторое время зависает и перезагружает все сообщения.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 16 апреля 2010

Поскольку вы используете WPF, это довольно просто.

Просто сохраните ваши "сообщения" в ObservableCollection<T>. Затем вы можете просто Вставить новый элемент в начало списка. Если вы связали это с элементом управления ItemsCollection, WPF будет корректно перерисовывать все для вас.

Если у вас нет МНОГО элементов, это будет работать довольно хорошо и довольно быстро. Сначала я попробую (так как это действительно легко реализовать) и постараюсь стать более «умным», если обнаружишь, что у него проблемы с производительностью. Однако я сомневаюсь, что у вас будут проблемы, если вы используете правильные коллекции, поскольку привязка данных WPF к ObservableCollection довольно быстрая.

0 голосов
/ 16 апреля 2010

Использовать привязку данных. Элементы пользовательского интерфейса привязаны к полям записи в коллекции. Панель из нескольких строк должна представлять собой коллекцию ItemCollection некоторого вида - скорее всего, Listbox, чтобы она дублировала шаблон данных элемента для каждой строки в базовом сборе данных.

После этого пользовательский интерфейс будет отслеживать любые изменения, внесенные в базовую коллекцию, если коллекция реализует INotifyCollectionChanged. Если вы используете коллекцию в памяти, вы можете просто добавить новые данные в верхнюю часть коллекции (вставка с индексом 0), и это вытолкнет все старые элементы вниз на дисплее пользовательского интерфейса. Если вы используете файловый или серверный источник данных, вы можете извлечь данные в фоновом потоке и опубликовать обновления в коллекции в памяти в потоке переднего плана. Только не обновляйте коллекцию данных из фонового потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...