Обновить пользовательский интерфейс из внешнего события - PullRequest
1 голос
/ 07 августа 2009

Прежде всего, я не являюсь разработчиком пользовательского интерфейса, и это, вероятно, очень простая проблема.

То, что у меня есть, - это внешний сервис, на который я подписываюсь на событие, когда когда-либо это событие запускает сервис, он его поднимает, каким-то образом манипулирует данными, а затем предоставляет UI данные для отображения

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

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

Для этого я использую c # и ether wpf или winforms.

Приветствия

Колин Г

Ответы [ 4 ]

1 голос
/ 07 августа 2009

Насколько просто это приложение?

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

Если это более сложное приложение, я бы сказал, что было бы более разумно рассмотреть что-то вроде MVC или MVP. Или MVVM для WPF, возможно, посмотрите в блоге Bea Costa примеры привязки данных.

1 голос
/ 07 августа 2009

Мое решение этой проблемы - создать таймер в вашем пользовательском интерфейсе и заставить ваш пользовательский интерфейс подписываться на метод onTick. Затем при каждом тике таймера пользовательский интерфейс просматривает сервис и выясняет, какие данные отображать.

0 голосов
/ 09 августа 2009

затем выдает в интерфейс данные для отображения ...

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

0 голосов
/ 07 августа 2009

Существует множество способов обрезать эту кошку, но, не зная немного больше о ваших требованиях и существующей инфраструктуре, позвольте мне предложить вам использовать EventBroker / Mediator для этого. Это простой способ реализовать тип взаимоотношений издатель / подписчик, не беспокоясь о слишком большом количестве сантехники.

Если вы используете Prism, я бы предложил использовать EventAggregator .

Если нет, вы можете рассмотреть возможность использования реализации Messenger в EventBroker, доступном с материалом MVVMFoundation, который написал Джон Смит. Это на самом деле не зависит от того, используете ли вы MVVM или WPF, и делает то, что вы ищете: http://mvvmfoundation.codeplex.com/

Надеюсь, это поможет.

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