Я использую пользовательский элемент управления WPF SQL Connection .У меня возникла проблема, возникающая из-за того, что я выкидывал StackOverflowException всякий раз, когда он появлялся на вкладке (AvalonDock DocumentTab ), которая была открыта, закрыта, а затем открыта во второй раз.
Я проверил базовую реализацию Джейка, чтобы лучше подходить моему приложению, но по сути это то же самое.Я добавил свойство, которое отключает выбор базы данных.
Я поместил элемент управления в свое приложение следующим образом:
<controls:SqlConnectionStringBuilder
Grid.Row="2"
Margin="0,10,0,0"
ConnectionString="{Binding ElementName=listBoxClients,
Path=SelectedItem.ConnectionString,
UpdateSourceTrigger=PropertyChanged}"
Header="Connection String"
RequireDatabase="True" />
Я провел некоторый рефакторинг кода-за позади 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).Это предотвращает возникновение проблемы.Единственным недостатком этого решения является то, что пользовательский интерфейс находится в состоянии null
, без выбора по умолчанию.Я хотел бы предотвратить это, решив проблему.