Обработка циклических зависимостей в компонентах GUI - PullRequest
2 голосов
/ 26 марта 2012

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

У меня есть интерактивный интерфейс для ввода временного интервала. Этот временной интервал имеет ограничения на количество дней (d), часов (h), минут (m) и секунд (s):

d <= c (дано c) </p>

ч: м: с <= 5: 30: 00 </p>

enter image description here

В вышеприведенном интерфейсе вы можете вручную изменять ручки (те круглые датчики), чтобы получить значение для каждого параметра (есть 4 ручки, 3 концентрических и 1 независимый). Кроме того, вы можете редактировать текстовые поля самостоятельно, а регуляторы должны отражать ваши изменения. Конечно, когда вы поворачиваете ручки, вы получаете изменения в значениях во время вращения , а не после того, как ваше движение стабилизируется. Это означает, что происходит огромное количество событий и множество сложных случаев. Например, представьте, что h: m: s равно 4:38:00, а пользователь увеличивает часы. Вместо простого 5:38:00, это должно быть 0:08:00 помимо увеличения дней или 5:30:00, если день уже максимальный.

В настоящее время происходит то, что вся логика записывается в событии TextChanged текстовых полей, а события ValueChanged регуляторов просто изменяют текст в соответствующем текстовом поле, вызывая его событие TextChanged. Таким образом, общий вопрос заключается в том, как можно справиться с таким сценарием - когда многие объекты меняют друг друга и зависят друг от друга по кругу ?? Обратите внимание, что при вращении ручки текстовое поле может отклонить изменение, таким образом переназначая предыдущее значение указателю ручки «при вращении».

1 Ответ

0 голосов
/ 26 марта 2012

Я думаю, MVVM вполне может подойти к вашему сценарию.У вас есть:

  • одна модель, которая содержит дни, часы, минуты и секунды, а также бизнес-логику для обработки изменений любого из них и отражения ее на других по мере необходимости (в .NET вы можете использовать Свойства зависимостей )
  • два представления: текстовые поля и базы знаний
  • две модели представления, по одной для каждого представления, которые могут обрабатывать события из представления и передавать их в модель, кака также обработка изменений в модели и отражение их в представлении

Этот подход изолирует два представления и позволяет вам поддерживать логику вокруг значений в одном месте (модель или контроллер, если вы хотите)добавить шаблон MVC ).Модели представления также инкапсулируют способ обработки событий в пользовательском интерфейсе.

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