Свойство зависимости со значением по умолчанию, вызывающим исключение StackOverflowException

Я использую элемент управления WPF SQL Connection User Control . У меня проблема с тем, что он генерирует исключение StackOverflowException всякий раз, когда он у меня есть на вкладке (AvalonDock DocumentTab ), которая была открыта, закрыта, а затем открыта во второй раз.

Я испортил базовую реализацию Джейка, чтобы лучше соответствовать моему приложению, но, по сути, это то же самое. Я добавил свойство, которое отключает выбор базы данных.

Я поместил элемент управления в свое приложение следующим образом:


Я провел некоторый рефакторинг кода программной части SqlConnectionStringBuilder, чтобы устранить эту проблему, но, похоже, это код нарушения:

public static readonly DependencyProperty ConnectionStringProperty =
    DependencyProperty.Register(
        "ConnectionString", 
        typeof(SqlConnectionString),
        typeof(SqlConnectionStringBuilder),
        new FrameworkPropertyMetadata(
            new SqlConnectionString { IntegratedSecurity = true, Pooling = false },
            FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public SqlConnectionString ConnectionString
{
    get { return (SqlConnectionString)GetValue(ConnectionStringProperty); }
    set { SetValue(ConnectionStringProperty, value); }
}

При втором открытии вкладки объект SqlConnectionString попадает в бесконечный цикл со своим методом OnPropertyChanged и свойством IntegratedSecurity . Когда я делаю свойство ConnectionString не DependencyProperty, у меня не возникает этой проблемы. Для меня это говорит о том, что проблема связана со значением по умолчанию для свойства зависимости.

Я порылся в Интернете, чтобы узнать, не возникало ли у кого-нибудь еще этой проблемы, но похоже, что я, возможно, немного запутался.Единственное, что, на мой взгляд, могло быть связано с этой проблемой, - это этот вопрос SO о свойствах зависимостей, на который был дан ответ как потокобезопасность . Я не уверен, как свойства зависимостей обрабатывают свои значения по умолчанию, но я мог видеть, что если один и тот же объект был подключен дважды, проблема с событием OnPropertyChanged . Однако это также наводит меня на мысль, что, если бы это было так, эта проблема была бы где-то отмечена!

Есть мысли?

Дополнительная информация :
Я удалил значение по умолчанию из регистрации свойства зависимости (установил для него значение null). Это предотвращает возникновение проблемы. Единственным недостатком этого решения является то, что пользовательский интерфейс находится в нулевом состоянии, без выбора по умолчанию. Однако я бы хотел предотвратить это, решив проблему.

12
задан Community 23 May 2017 в 12:24
поделиться