WPF SQL Connection User Control kullanıyorum. Açılmış, kapatılmış ve sonra ikinci kez açılmış bir sekmede (AvalonDock DocumentTab) varsa, StackOverflowException atma ile ilgili bir sorun yaşıyorum.Varsayılan Değerle Bağımlılık Varlığı Atma StackOverflowException
Uygulamamıza daha iyi uyacak şekilde Jake'in temel uygulamasıyla uğraştım ama aslında aynı. Veritabanının seçimini devre dışı bırakan bir özellik ekledim. Bu sorunu gidermek amacıyla
<controls:SqlConnectionStringBuilder
Grid.Row="2"
Margin="0,10,0,0"
ConnectionString="{Binding ElementName=listBoxClients,
Path=SelectedItem.ConnectionString,
UpdateSourceTrigger=PropertyChanged}"
Header="Connection String"
RequireDatabase="True" />
Ben SqlConnectionStringBuilder kod-arkasına bazı üstlenmeden yaptık, ama bu gibi görünüyor:
Bu gibi benim uygulamasına kontrolünü yerleştirdiğiniz soruna kodu: SqlConnectionString
nesnenin OnPropertyChanged
yöntemi ile bir sonsuz döngü ve IntegratedSecurity
özelliği içine alır sekme ikinci açık üzerinde
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); }
}
. Ben ConnectionString
özelliği yaptığınızda bir DependencyProperty değil, bu sorunla karşılaşıyorum. Bana göre bu, sorunun bağımlılık özelliğinin varsayılan değeriyle olduğunu söylüyor.
Başka birinin bu sorunu yaşayıp yaşamadığını görmek için çevrimi araştırdım, ama sanki kendimi biraz turne almış olabilirmişim gibi görünüyor. Bu sorunun olabileceğini aklıma gelen tek şey, this SO question about dependency properties which was answered as thread safety ile ilgilidir. Bağımlılık özelliklerinin varsayılan değerlerini nasıl ele aldığından emin değilim, ancak aynı nesnenin OnPropertyChanged
olayı ile iki kat daha fazla sorunla karşılaştığını görebiliyordum. Ancak bu aynı zamanda, eğer durum buysa, bu sorunun bir yere not edildiğine inanmamı da beraberinde getirdi!
Herhangi bir düşünce?
Bilgi Ek:
Ben bağımlılık özelliği (boş olarak ayarlayın) tescili Varsayılan değeri kaldırıldı. Bu, sorunun oluşmasını engeller. Bu çözümün tek dezavantajı, UI'nin bir null
durumunda olması, varsayılan seçimlerin olmamasıdır. Bununla birlikte, sorunu çözerek durumdan kaçınmak isterim. setter bir
if (value != GetValue(ConnectionStringProperty))
ekleyerek Muhtemelen
Sorunun ne olduğundan emin değilsiniz, ancak varsayılan değeri değişken bir referans türünün örneğine ayarlamamanız gerekir; çünkü **, sınıfınızın ** tüm örnekleri tarafından paylaşılacaktır! Yapabilirseniz, SqlConnectionString yerine bir değer yazın. * EDIT: Aslında yapamazsın, çünkü bu sınıf kendi kodunda görünmüyor ...* –
@ThomasLevesque "** Tüm örnekler ** tarafından paylaşılacak" ile çivilenmiş olduğunu düşünüyorum. Mülkiyet değişikliklerinin sonsuz döngüsüne nasıl girdiğimi bilmiyorum, ama bunun bir sorun olduğunu görebildiğim başlatıcılar olarak geçen değerlerle ilgisi var. –