Связывание WPF с неизменяемым свойством - PullRequest
3 голосов
/ 12 февраля 2009

Я использую шаблон MVVM, и у меня есть POCO (в моей модели) со свойством Start Date.

Я хочу показать прошедшее время с даты начала в элементе управления в окне WPF / пользовательском элементе управления ...

Я не вижу, как я могу связать свойство ModelView с элементом управления пользовательского интерфейса и заставить его автоматически обновлять эту продолжительность ... Кто-нибудь может предложить способ?

Я мог бы использовать что-то (таймер или поток) для обновления свойства duration в моем ModelView, но я просто не вижу другого пути, потому что, насколько я понимаю, пользовательский интерфейс будет обновляться только при изменении значения свойства. Однако начальная дата в моем POCO не меняется, а меняется только прошедшее время, которое является расчетным значением.

Я что-то упустил?

1 Ответ

3 голосов
/ 12 февраля 2009

Вы на правильном пути. Взгляните на шаблон Presentation Model на странице Мартина Фаулера.

Основная идея состоит в том, чтобы построить модель для пользовательского интерфейса (ViewModel) и просто синхронизировать его с ним. Каждый бит информации, отображаемый в пользовательском интерфейсе, должен иметь соответствующее поле или свойство в ViewModel (хотя они могут быть получены или получены из значений в модели). ViewModel позволяет легко сохранять состояние просмотра / состояние сеанса (например, текущий выбор элементов в UserList), которого нет в классе Model позади.

Поскольку вы хотите отобразить значение «истекшее время с момента» в пользовательском интерфейсе, ваша ViewModel должна иметь свойство с именем ElapsedTimeSince. Ваш WPF View имеет элемент управления, связанный с данным свойством. Теперь в соответствии с вашими потребностями убедитесь, что у вас есть событие потока / таймера, которое периодически переоценивает значение свойства, используя текущее время и свойство StartDate модели. Ваш пользовательский интерфейс должен отражать обновленное значение.

...