#c# #wpf #data-binding #mvvm
#c# #wpf #привязка к данным #mvvm
Вопрос:
Я.Разработчик Net переходит с Winforms на WPF и столкнулся с распространенной проблемой, из-за которой я хотел бы найти конкретное решение для WPF. У меня есть GridView, который в основном привязан к таблице в SQL. Так получилось, что я использую MVVM, так что это делается косвенно, поскольку GridView фактически привязан к ViewModel, который получает свои данные из Entity Model. В Winforms, чтобы поддерживать синхронизацию в режиме реального времени, у меня был бы фоновый поток, который время от времени выполнял бы поиск обновлений и получал последнюю версию данных таблицы SQL. Конечно, я мог бы сделать это в WPF, но мне было интересно, есть ли лучший способ сделать это в WPF, где пользовательский интерфейс действительно может обновляться в «реальном времени» по мере обновления таблицы. Приложение будет на многих компьютерах, поэтому я не могу просто получить обновление, когда локальный пользователь каким-либо образом изменяет данные через приложение. Кнопки обновления ужасны, поэтому я тоже этого не хочу. Есть ли лучшая практика для этого в WPF?
Ответ №1:
Методология опроса по-прежнему надежна. Что касается «лучшего» способа, существуют методы настройки уведомлений (например, уведомление об изменении запроса) в ADO.NET с SQL 2005 или новее. Однако это не специфичная реализация для WPF и может быть применена к Windows forms.
Ответ №2:
tbh, я бы сделал это довольно похоже, то есть фоновый поток, который опрашивает, затем обновляет связанную коллекцию. Если вам нужна дуплексная связь, вы могли бы сделать это, чтобы избежать опроса, но это создает свои собственные проблемы и не имеет ничего общего с WPF. Следует помнить о нескольких вещах:
- Используйте ObservableCollection в качестве источника ItemsSource. Таким образом, вы можете вводить «дельты» того, что изменилось, что должно свести взаимодействие с сервером к минимуму.
- Используйте диспетчер.Вызывается при изменении ObservableCollection в фоновом режиме, в противном случае…вы знаете о проблемах с WinForms.