Есть ли способ установить привязку по умолчанию в базовом классе? - PullRequest
1 голос
/ 04 ноября 2011

У меня есть MyTextBox, который является производным от TextBox.Я хочу установить параметр привязки ValidatesOnDataErrors = True для TextProperty в MyTextBox, чтобы при каждом использовании этого элемента управления ValidatesOnDataErrors инициализировался с True.

Это мой код:

public class MyTextBox:MyBaseTextBox
{
    public MyTextBox()
    {
        MaxLength = 45;
    }

    protected override void OnPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs e)
    {
        base.OnPropertyChanged(e);
        if (e.Property == TextProperty)
        {
            Binding b = BindingOperations.GetBinding(this, TextProperty);
            if (b != null)
            {
                b.ValidatesOnDataErrors = true;
            }                
        }
    }
}

И я всегда получаю исключение:

An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll

Additional information: Binding cannot be changed after it has been used.

Я что-то упустил?

1 Ответ

3 голосов
/ 04 ноября 2011

Я думаю, что вам нужно специальное связывание, а не специальное текстовое поле.

Посмотрите здесь: Установите ValidatesOnDataErrors для всех привязок программно

в WPF вы не можетеизменить привязку, как только она была использована.

, чтобы заставить ваш код работать, сначала нужно очистить привязку, а затем добавить новую с установленным значением true для ValidatesOnDataErrors, но это звучит беспорядочно ...

...