У меня есть двоичное поле в моей базе данных, которое трудно описать в пользовательском интерфейсе с помощью одного флажка типа «XXXX?». Я бы предпочел использовать пару радиокнопок (например, «Сделай это способом Foo» и «Сделай это способом Bar»), но сейчас все остальные поля в моей форме привязаны к бизнес-объекту. Я бы тоже хотел связать пару радио-кнопок с бизнес-объектом, но пока не нашел хорошего способа сделать это. Я могу привязать одну из кнопок к полю, чтобы поле было установлено в «true», если кнопка выбрана, но при выборе другой кнопки отменяется выбор первой (т. Е. Две переключатели правильно спарены ), значение поля не обновляется, чтобы отразить это.
Я бы хотел сказать
button1.DataBindings.Add(new Binding("checked", source, "useFoo"));
button2.DataBindings.Add(new Binding("checked", source, "!useFoo"));
но я вполне уверен, что бросит, когда он запустится. Есть ли более простой способ, или я должен просто подумать над тем, как обозначить один флажок? Я не хочу добавлять дополнительные функции для обработки чего-то такого тривиального ...
ETA: комментатор предложил рассмотреть раскрывающийся список (ComboBox). Я думал об этом, но как мне связать это с логическим полем в базе данных / свойством в бизнес-объекте? Если я свяжу SelectedItem со свойством useFoo, что будет в коллекции Items? Должен ли я добавить только «True» и «False» или я могу каким-то образом добавить объект пары ключ / значение, который связывает отображаемый элемент («Use Foo» / «Do Not Use Foo») с логическим значением, стоящим за ним? У меня проблемы с поиском документов по этому вопросу.
Об ответе: решение, которое я использовал, заключалось в модификации бизнес-объекта - основная идея очень похожа на ту, которая была опубликована Gurge, но я придумал ее отдельно, прежде чем прочитать его ответ. Короче говоря, я добавил отдельное свойство, которое просто возвращает !useFoo
. Одна радиокнопка привязана к source.UseFoo
, а другая - к source.UseBar
(имя нового свойства). Важно убедиться, что новое свойство имеет как геттеры, так и сеттеры, иначе вы получите действительно странное поведение.