Я использую WPF User Connection User Control. У меня возникла проблема с тем, что он бросает исключение StackOverflowException всякий раз, когда я его на вкладке (AvalonDock DocumentTab), которая была открыта, закрыта, а затем открыта во второй раз.
Я перепутал с реализацией базы Jake, чтобы лучше соответствовать моему приложению, но, по сути, это одно и то же. Я добавил свойство, которое отключает выбор базы данных.
Я поместил элемент управления в свое приложение следующим образом:
<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
, не выбранном по умолчанию. Однако я хотел бы предотвратить это, если решить эту проблему.