Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
Есть бизнес-объект, реализующий интерфейс IDataErrorInfo. В setters публичных свойств объекта при выходе значения за допустимые границы добавляется ошибка в словарь. Например, если свойство Age (по умолчанию 0) становится отрицательным, выдается сообщение об ошибке. Также у объекта есть readonly свойство bool IsObjectDataValid. При добавлении ошибки в словарь это свойство сбрасывется в false, а при очистке словаря - в true. Смысл этого свойства - например, его привязка к кнопке "Сохранить". Т.е. до тех пор, пока юзер не ввел логически корректные данные во все свойства бизнес-объекта, программа не даст сохранить объект. Всё это работает, НО... Если юзер ввел вместо числа строку ("moron"), то свойство остается в предыдущем состоянии, а обработка setter не вызывается, так как ошибка произошла в момент попытки приведения типа. Следовательно, имеем старое значение Age, IsObjectDataValid = true, и кнопка "Сохранить" доступна. На красный бордюр вокруг элемента юзер плюет с высокой башни. Внимание, вопрос. Как передать ошибку UI в связанный бизнес-объект? Как при "кривом" вводе установить IsObjectDataValid = false? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 11:37 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
Дмитрий Александров, погодь, а код ты показывать , как у тебя интерфейс связан с твоим классом не хочешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 11:43 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
Через XAML <TextBox Width="200" Text="{Binding Path=Age, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" /> Ничего необычного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 12:03 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
Точнее, так Код: plaintext 1. 2. 3. 4. 5. 6. 7. а в code-behind: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 15:47 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
Дмитрий Александров, у вас как то все неправильно организовано в книжке Макдональдса Pro WPF in C#2008 хорошо написано про то вам надо так как ошибка произошла в момент попытки приведения типа - это смотреть ValidatesOnExceptions да и для кнопки лучше использовать routetcomand для этих целей и проверка на ошибки можно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 10:37 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
koJIo6ok, у меня еще ничего не организовано, я только прикидываю - что, как. Если я правильно понял, то ваш код лежит на форме (или чем-то подобном). Получается, для того, чтобы сделать кнопку доступной, мне надо проверять валидность как на уровне формы (ваш код), так и на уровне моего бизнес-объекта. А вот это мне и не нравиться. Можно ли перенаправить обработчик ошибок приведения забинденного контрола на метод бизнес-объекта? Например, я делаю в БО специальный public-method SetUIError(string), и натравливаю обработчик ошибок TextBox на него? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 10:52 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
Дмитрий АлександровkoJIo6ok, у меня еще ничего не организовано, я только прикидываю - что, как. Если я правильно понял, то ваш код лежит на форме (или чем-то подобном). Получается, для того, чтобы сделать кнопку доступной, мне надо проверять валидность как на уровне формы (ваш код), так и на уровне моего бизнес-объекта. А вот это мне и не нравиться. ничего вы не поняли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 10:59 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
ничего вы не поняли Спасибо за информативный ответ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 11:24 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
Дмитрий АлександровkoJIo6ok, у меня еще ничего не организовано, я только прикидываю - что, как. Если я правильно понял, то ваш код лежит на форме (или чем-то подобном). Получается, для того, чтобы сделать кнопку доступной, мне надо проверять валидность как на уровне формы (ваш код), так и на уровне моего бизнес-объекта. А вот это мне и не нравиться. Можно ли перенаправить обработчик ошибок приведения забинденного контрола на метод бизнес-объекта? Например, я делаю в БО специальный public-method SetUIError(string), и натравливаю обработчик ошибок TextBox на него? нет проверять валидность нужно только на уровне нужного элемента - textbox-a, Grid-a, панели какой ну или для всей формы как надо вам, легко можно разобраться если прочитать книжку ту что я писал, лучше ее почитать сначала чтобы не переделывать потом все и не тратить время впустую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 11:46 |
|
||
|
WPF: как связать бизнес-объект и UI валидацию?
|
|||
|---|---|---|---|
|
#18+
нет проверять валидность нужно только на уровне нужного элемента - textbox-a, Grid-a, панели какой ну или для всей формы как надо вам, легко можно разобраться если прочитать книжку ту что я писал, лучше ее почитать сначала чтобы не переделывать потом все и не тратить время впустую За книжку спасибо, уже нашел, читаю. Пока не дочитал до нужного места, подскажите следующее. БО предполагается использовать с несколькими интерфейсами: WPF для внутренних юзеров и Silverlight для внешних. А это значит, что проверки придется дублировать в разных интерфейсах? Не то чтобы сильно пугало (функциональность в приложении Silverlight предполагается сильно урезанная), но как-то это... Не комильфо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 12:08 |
|
||
|
|

start [/forum/topic.php?fid=21&tid=1442668]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 349ms |

| 0 / 0 |
