2008-10-20 15 views
23

मेरे पास एक एप्लिकेशन में एकाधिक परतें हैं और मुझे स्टेटस बार में परिवर्तन करने के लिए जीयूआई परत पर ईवेंट को बबल करना पड़ता है। । मुझे अपने आप को बार-बार कोडित लिखना पड़ता है जहां प्रत्येक परत बस निचले स्तर से घटनाओं की सदस्यता लेती है और फिर कॉल में वापस श्रृंखला को एक ईवेंट बढ़ाती है। क्या ऐसा करने का एक और अधिक प्रभावी तरीका है?घटनाओं को बुलबुला करना।

उत्तर

29

यदि सब आप कर रहे हैं एक और ईवेंट हैंडलर से एक ईवेंट हैंडलर फायरिंग कर रहा है, आप बीच आदमी बाहर काट और ऐड में सीधे ईवेंट हैंडलर्स हुक कर सकते हैं/घटना के लिए ब्लॉकों को हटा दें।

उदाहरण के लिए, यदि आप एक "SaveButtonClick" घटना के साथ एक UserControl है, और तुम सब जब करना चाहते हैं, ईवेंट हैंडलर फोन जब अपने UserControl पर "SaveButton" क्लिक किया जाता है है आप यह कर सकते हैं:

public event EventHandler SaveButtonClick 
{ 
    add { this.SaveButton.Click += value; } 
    remove { this.SaveButton.Click -= value; } 
} 

अब आप SaveButtonClick ईवेंट को सक्रिय करने के लिए कोई कोड की जरूरत नहीं है - जब SaveButton.Click घटना उठाया है यह स्वचालित रूप से सक्रिय किए जाएंगे (यानी जब कोई व्यक्ति उस बटन पर क्लिक करता)।

+0

यह दिलचस्प लगता है। कार्यान्वयन को देखना अच्छा लगेगा। –

+0

@ मैक्सिम - मैंने जो कोड पोस्ट किया है * है * कार्यान्वयन। यदि आपके पास SaveButton नामक बटन के साथ UserControl है और आप उस यूसी को किसी फॉर्म पर छोड़ देते हैं, तो आप फॉर्म से SaveButtonClick पर सब्सक्राइब कर सकते हैं, और जब भी बटन क्लिक किया जाता है तो आपके ईवेंट हैंडलर को कॉल किया जाएगा। –

+0

मुझे विचार और आसान कार्यान्वयन पसंद है। लेकिन मुझे उपयोगकर्ता नियंत्रण और ग्राहक –

0

आपके पास एक केंद्रीय चैनल हो सकता है जो केवल ईवेंट का समर्थन करता हो। यह चैनल स्वतंत्र होना चाहिए ताकि परत केवल प्रकाशित या सब्सक्राइब हो।

+1

यह दिलचस्प लगता है, लेकिन व्याख्या बहुत अस्पष्ट है। क्या आप कुछ उदाहरण दे सकते हैं? – spoulson

1

जब तक मैं कुछ और डिज़ाइन नहीं देखता .. एक अच्छा जवाब देना मुश्किल होगा।

WPF बुलबुला घटनाओं अप करता है (स्वतः) यूआई घटक/नियंत्रण पेड़ ... यह अब ढांचे में बनाया गया है। तो मुझे लगता है कि है कि सिफारिश की जिस तरह से :)

बीच आदमी Layer2 है Layer1 और layer3 अब एक दूसरे को जानते हैं कि दरकिनार के साथ परेशानी ... मिलकर कर रहे हैं। तो यह एक व्यापार है .. यदि आप युग्मन के साथ ठीक हैं .. मध्य व्यक्ति को खत्म करें/इस जिम्मेदारी के साथ एक विशेष घटक का आविष्कार करें। हालांकि यदि आप परत 3 को गर्म-स्वीकार्य (कम युग्मन) होने की अपेक्षा करते हैं, तो मैं कहूंगा कि बुलबुला जारी रखें।

0

Update Controls .NET पर एक नजर डालें। ये नियंत्रण आपके डेटा मॉडल के कुछ हिस्सों को खोजते हैं जो वे व्यापार तर्क की परतों के माध्यम से भी निर्भर करते हैं। आपको लिखने के लिए कोड लिखने की आवश्यकता नहीं है।

3

जेरेमी मिलर के ब्लॉग "द शेड ट्री डेवलपर", विशेष रूप से उनके Write Your Own CAB series का एक पठन है - वह कमांड पैटर्न सामग्री जो उसके बारे में बात करता है वह शायद आपको चाहिए।

3

पीटर rilling WinForms में घटना बुदबुदाती/प्रसारण का अनुकरण करने का एक तरीका पोस्ट किया गया है। यह सरल और प्रभावी है।

http://www.codeproject.com/KB/cs/event_broadcast.aspx

संबंधित मुद्दे