मैं WPF SQL Connection User Control का उपयोग कर रहा हूं। मुझे स्टैक ओवरव्लो एक्सेप्शन फेंकने के साथ कोई समस्या हो रही है जब भी मेरे पास एक टैब (AvalonDock DocumentTab) है जिसे खोला, बंद कर दिया गया है, और फिर दूसरी बार खोला गया है।डिफ़ॉल्ट मूल्य फेंकने के साथ निर्भरता संपत्ति StackOverflowException
मैंने अपने आवेदन के अनुकूल होने के लिए जेक के मूल कार्यान्वयन के साथ गड़बड़ी की है, लेकिन यह अनिवार्य रूप से वही है। मैंने एक ऐसी संपत्ति जोड़ दी है जो डेटाबेस के चयन को अक्षम करता है।
मैं इस तरह अपने आवेदन में नियंत्रण रखा है:
<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
संपत्ति को निर्भर करता हूं तो निर्भरता प्रॉपर्टी मुझे यह समस्या नहीं मिलती है। मेरे लिए यह कहता है कि समस्या निर्भरता संपत्ति के डिफ़ॉल्ट मूल्य के साथ है।
मैंने यह देखने के लिए ऑनलाइन चारों ओर दबाया कि क्या किसी और के पास यह समस्या है, लेकिन ऐसा लगता है जैसे मैं खुद को एक अचार में प्राप्त कर सकता हूं। एकमात्र चीज करीब है कि मैं सोच सकता हूं कि यह समस्या this SO question about dependency properties which was answered as thread safety के संबंध में हो सकती है। मुझे यकीन नहीं है कि कैसे निर्भरता गुण उनके डिफ़ॉल्ट मानों का इलाज करते हैं, लेकिन मैं देख सकता था कि यदि एक ही ऑब्जेक्ट को OnPropertyChanged
ईवेंट के साथ समस्या से दो बार तारित किया गया था। हालांकि यह मुझे विश्वास दिलाता है कि अगर यह मामला कहीं भी देखा गया होता!
कोई विचार?
अतिरिक्त सूचना:
मैं निर्भरता संपत्ति (शून्य पर सेट) के पंजीकरण से डिफ़ॉल्ट मान हटा दिया। यह इस मुद्दे को होने से रोकता है। इस समाधान में एकमात्र कमी यह है कि यूआई null
स्थिति में है, कोई डिफ़ॉल्ट चयन नहीं है। हालांकि, इस मुद्दे को हल करके मामला होने से मैं इसे रोकना चाहता हूं।
सुनिश्चित नहीं है कि समस्या क्या है, लेकिन आपको एक डिफ़ॉल्ट मान को एक परिवर्तनीय संदर्भ प्रकार के उदाहरण में सेट नहीं करना चाहिए, क्योंकि ** यह आपके वर्ग के सभी उदाहरण ** द्वारा साझा किया जाएगा! यदि आप कर सकते हैं, तो SqlConnectionString को इसके बजाय एक मान प्रकार बनाएं। * संपादित करें: वास्तव में आप नहीं कर सकते, क्योंकि यह वर्ग आपके कोड में प्रतीत नहीं होता है ...* –
@ थॉमस लेवेस्क मुझे लगता है कि आपने इसे "** ** सभी उदाहरणों से साझा किया जाएगा"। मुझे नहीं पता कि यह संपत्ति परिवर्तनों के अनंत लूप में कैसे पहुंचता है, लेकिन इसे शुरुआती के रूप में पारित मूल्यों के साथ करना है, मैं इसे एक मुद्दा मान सकता हूं। –