Я следую шаблону проектирования модели представления, предложенному Martin Fowler для моей архитектуры графического интерфейса в проекте Windows Forms.
"Сущность модели презентации заключается в полностью автономном классе, который представляет все данные и поведение окна пользовательского интерфейса, но без каких-либо элементов управления, используемых для отображения этого пользовательского интерфейса на экране. Затем представление просто проецируется состояние презентации модели на стекле .... » - Мартин Фаулер
Я считаю эту концепцию очень гибкой и простой для понимания, за исключением одной проблемы, связанной с привязкой данных RadioButtons к свойствам объекта Data / Domain.
Предположим, у меня есть форма Windows с тремя переключателями для отображения некоторых параметров «Режим» как -
- Авто
- Руководство
- Импортировать
Как я могу использовать логические свойства объектов данных / домена для привязки данных к этим кнопкам? Я пробовал много способов, но безуспешно. Например, я хотел бы написать такой код -
rbtnAutoMode.DataBindings.Add("Text", myBusinessObject, "IsAutoMode");
rbtnManualMode.DataBindings.Add("Text", myBusinessObject, "IsManualMode");
rbtnImportMode.DataBindings.Add("Text", myBusinessObject, "IsImportMode");
В объекте данных / домена должно быть четвертое свойство, такое как «SelectedMode», которое в конце должно отображать одно значение, например «SelectedMode = Auto». Я пытаюсь обновить это свойство при изменении любого из «IsAutoMode», «IsManualMode» или «IsImportMode», например через установщики свойств. У меня есть INotifyPropertyChanged, реализованный в моем объекте данных / домена, поэтому обновление любого свойства объекта данных / домена автоматически обновляет мои элементы управления пользовательского интерфейса, это не проблема.
Хороший пример привязки двух переключателей в вопросе о переполнении стека Как использовать привязку данных с переключателями Windows Forms?, но мне не хватает ссылки при реализации того же с тремя кнопками. У меня очень неустойчивое поведение переключателей.
Надеюсь, я смог разумно это объяснить. На самом деле я очень тороплюсь и не могу опубликовать подробный код, но приветствую любую помощь в этом отношении.
Есть простое решение этой проблемы, открыв такой метод, как -
public void SetMode(Modes mode)
{
this._selectedMode = mode;
}
который мог бы быть вызван из события «CheckedChanged» переключателей из пользовательского интерфейса и идеально установил бы «SelectedMode» для бизнес-объекта, но мне нужно расширить пределы, чтобы проверить, можно ли это сделать с помощью DataBinding.