Re[2]: WPF валидация в юзер контроле.
От: Gremlin2 http://www.fb2library.net/
Дата: 20.12.13 07:56
Оценка:
Здравствуйте, UberPsychoSvin, Вы писали:

UPS>Влепил костылище, в CanExecute команды кнопки.

UPS>
UPS>public static bool HasValidationErrors(this DependencyObject parent)
UPS>{
UPS>}
UPS>


Я делаю через BindingGroup:
    <Window.BindingGroup>
        <BindingGroup NotifyOnValidationError="True"/>
    </Window.BindingGroup>


        protected override void OnButtonClick(object selectedItem, CancelEventArgs args)
        {
            TaskDialogButtonData buttonData = selectedItem as TaskDialogButtonData;
            if (buttonData != null)
            {
                if (buttonData.Button == TaskDialogButtons.OK)
                {
                    BindingGroup bindingGroup = this.BindingGroup;
                    if (bindingGroup != null)
                    {
                        bool isValid = bindingGroup.ValidateWithoutUpdate();
                        foreach (BindingExpression expression in bindingGroup.BindingExpressions)
                        {
                            Binding binding = expression.ParentBinding;
                            if (binding.ValidationRules.Count > 0 || binding.ValidatesOnDataErrors)
                            {
                                expression.UpdateSource();
                            }

                            if (expression.HasError)
                            {
                                isValid = false;
                            }
                        }

                        args.Cancel = !isValid;
                    }
                }
            }
        }


Только обратите внимание, что при использовании BindingGroup, необходимо для всех Binding в группе задать UpdateSourceTrigger. Иначе будет использоваться стандартный Explicit.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.