डब्ल्यूपीएफ कभी-कभी परेशान हो सकता है।एक WPF विंडो और उसके उपयोगकर्ता नियंत्रण के बीच डेटा साझा करने का सबसे अच्छा तरीका क्या है?
मेरे पास एक साधारण सरल अनुप्रयोग है जिसमें एक मुख्य विंडो होती है जिसमें एक टैब नियंत्रण और कई टैब होते हैं। मुझे एक ही फ़ाइल में सभी टैब के लिए कोड रखने का विचार पसंद नहीं आया, इसलिए मैंने प्रत्येक टैब को एक अलग उपयोगकर्ता नियंत्रण में तोड़ने के लिए this question से उत्तर का उपयोग किया।
मेरी मुख्य विंडो के अंदर मेरे पास एक ऑब्जेक्ट का एक उदाहरण है जिसमें एप्लिकेशन सेटिंग्स और कुछ अन्य एप्लिकेशन-व्यापी डेटा शामिल हैं। मेरे कई टैबों को डेटा बाध्यकारी उद्देश्यों के लिए इस डेटा तक पहुंच की आवश्यकता है। मैं इसे पूरा करने के लिए एक अच्छा तरीका खोजने में सक्षम नहीं हूं।
सबसे पहले मैंने लोड किए गए ईवेंट में पैरेंट विंडो तक पहुंचने की कोशिश की और मुख्य विंडो में संपत्ति का संदर्भ प्राप्त किया जो सेटिंग ऑब्जेक्ट का खुलासा करता है, जैसा कि नीचे दिए गए कोड में दिखाया गया है। इस तरह के काम, लोड किए गए ईवेंट को छोड़कर टैब को हर बार फोकस करने पर निकाल दिया जाता है। साथ ही, यह घटना नियंत्रण जीवन चक्र में देर से होती है, इसलिए उपयोगकर्ता XAML को नियंत्रित करने में इस ऑब्जेक्ट में किसी भी गुण से जुड़ने में सक्षम नहीं हूं।
private void MyUserControl_Loaded(object sender, RoutedEventArgs e)
{
this.ApplicationSettings = ((MainWindow)Window.GetWindow(this)).ApplicationSettings;
}
फिर मैंने उपयोगकर्ता नियंत्रण नियंत्रक में डेटा को पारित करने के साथ प्रयोग किया, लेकिन XAML में ऐसा करने का कोई तरीका नहीं है।
यह देखते हुए कि इन मैं ApplicationSettings वर्ग सिंगलटन बनाने के लिए और यह हर जगह संदर्भ सकता है आवेदन-व्यापी सेटिंग कर रहे हैं, लेकिन मैं ऐसा करने के लिए नहीं है कि इकाई परीक्षण प्रयोजनों के लिए पसंद करेंगे।
तो कोई ऐसा कुछ कैसे पूरा करता है? क्या मेरा दृष्टिकोण सिर्फ मौलिक रूप से त्रुटिपूर्ण है? मेरे दिमाग में ये सभी यूआई तत्व एक ही विंडो का हिस्सा हैं और इसलिए मुख्य विंडो से डेटा तक पहुंचने में सक्षम होना चाहिए, लेकिन ऑब्जेक्ट मॉडल इसे अनुमति देने के लिए प्रकट नहीं होता है।
मुझे लगता है कि यह वह मार्ग है जिसे मैं लेने जा रहा हूं। जैसा कि मैंने मूल पोस्ट में कहा था, मैं सिंगलटन व्यवहार को वास्तविक सिंगलटन के बिना चाहता हूं, और यह मुझे वह देता है। असल में, मैं शायद कक्षा सिंगलटन बनाउंगा, लेकिन परीक्षण उद्देश्यों के लिए निर्माता को छोड़ दूंगा। धन्यवाद! – EricTheRed