Я использую элемент управления 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). Это предотвращает возникновение проблемы. Единственным недостатком этого решения является то, что пользовательский интерфейс находится в нулевом
состоянии, без выбора по умолчанию. Однако я бы хотел предотвратить это, решив проблему.