2009-09-18 8 views
5

मैं WinForms में एमवीपी का उपयोग करने का प्रयास कर रहा हूं और बच्चे के विचारों के बीच समन्वय को सर्वोत्तम तरीके से संभालने के तरीके पर उलझन में हूं।एमवीपी में सबसे अच्छा बाल विचारों का समन्वय कैसे किया जाता है?

उदाहरण के लिए, मेरे पास एक मूल दृश्य है जिसमें दो बच्चे के विचार हैं। एक बच्चे के दृश्य पर होने वाली घटनाओं को दूसरे बच्चे के दृश्य द्वारा एक कार्रवाई करने की आवश्यकता होती है।

क्या माता-पिता इसे सीधे नियंत्रित करना चाहिए? ऐसा लगता है कि मैं ऐसा करके एमवीपी पैटर्न को छोड़ रहा हूं।

या क्या बच्चे के विचार एक-दूसरे को कन्स्ट्रक्टर पैरामीटर के रूप में लेना चाहिए? उस स्थिति में, जब किसी बच्चे को पहले बच्चे के दृश्य से निकाल दिया गया था, तो दूसरा बच्चा दृश्य घटना प्राप्त करेगा और फिर अपने प्रस्तुतकर्ता को सूचित करेगा कि कुछ हुआ है? इसके बाद प्रस्तुतकर्ता को दूसरे बच्चे के विचार को बताने के लिए पहले बच्चे के दृश्य (जिसे यह भी पता नहीं है) से डेटा प्राप्त करने की आवश्यकता है। ऐसा लगता है कि मुझे लगता है कि मुझे कुछ याद आ रही है।

public class ParentView : UserControl, IParentView 
{ 
    private ChildViewOne childViewOne; 
    private ChildViewTwo childViewTwo; 
    private ParentViewPresenter presenter; 

    private RegisterEvents() 
    { 
     childViewOne.EventOccured += new EventHandler(HandleEvent); 
    } 

    private void HandleEvent() 
    { 
     childViewTwo.DoSomething(); 
    } 
} 
+0

"एक बच्चे के दृश्य पर होने वाली घटनाओं को दूसरे बच्चे के दृश्य द्वारा एक कार्रवाई करने की आवश्यकता होती है।" क्या कार्यवाही होती है? – SwDevMan81

+0

उदाहरण के लिए, मान लें कि childViewOne एक टाइमलाइन है और childViewTwo एक वीडियो है। टाइमलाइन टाइम टाइमेड घटना का खुलासा करती है और वीडियो को वीडियो के वर्तमान फ्रेम को बदलकर उस घटना का जवाब देने की आवश्यकता होती है। – jameswelle

उत्तर

0

आप Event Aggregator pattern देख सकते हैं। यह आपको सबकुछ कम से कम युग्मित रखने की अनुमति देगा। प्रिज्म एक के साथ आता है और पूरे प्रिज्म ढांचे/पुस्तकालय में खरीदने के बिना उपयोग करना आसान है।

आपका कोड तो ऐसा दिखाई दे सकता:

public class ChildViewOne { 
    private IEventAggregator evtAggregator; 

    public ChildViewOne(IEventAggregator evtAggregator) { 
     this.evtAggregator = evtAggregator; 
    } 

    private void OnEventOccured(){ 
     evtAggregator.GetEvent<EventOccured>().Publish(); 
    } 
} 

publish class ChildViewTwo { 
    private IEventAggregator evtAggregator; 

    public ChildViewTwo(IEventAggregator evtAggregator) { 
    evtAggregator.GetEvent<EventOccured>().Subscribe(OnEventOccured); 
    } 

    private void OnEventOccured() { 
     // Do something here... 
    } 
} 

संपादित करें: ब्रायन नॉयेस WinForms करने के लिए चश्मे घटना एग्रीगेटर मोड़ा गया है। इसे देखें here, on his blog

0

निर्माता में अन्य बच्चे विचारों ले रहा है एक बुरा विचार की तरह लगता है:

यहाँ स्थिति के लिए कुछ छद्म कोड है। यदि भविष्य में किसी अन्य बच्चे के दृश्य को जोड़ने की आवश्यकता है तो आप क्या करेंगे?

यदि आप अपने बच्चे के ईवेंट को मूल दृश्य के माध्यम से रूट करते हैं तो यह बेहतर होगा। यदि आप अपने कार्यक्रमों को मूल दृश्य के माध्यम से रूट करते हैं तो आप एमवीपी का उल्लंघन कैसे कर रहे हैं?

+0

क्या आपका मतलब है कि मैं वर्तमान में कर रहा हूं या यदि माता-पिता ने अपने बच्चों की सभी घटनाओं के संघ का खुलासा किया और घटनाओं को अपने प्रस्तुतकर्ता के पास पास कर दिया? – jameswelle

0

मैं सिबलिंग व्यू नामक आईसीएचल्ड व्यू इंटरफेस की एक संपत्ति तैयार करूंगा (या आपके ऐप के व्यावसायिक संदर्भ को और अधिक उपयुक्त)। आपको इसे कन्स्ट्रक्टर में एक param के रूप में भी जोड़ने की ज़रूरत नहीं है, लेकिन इंटरफ़ेस में SetSiblingView() नामक एक विधि शामिल है। आप इसे कन्स्ट्रक्टर से कॉल कर सकते हैं। इसके बाद आप एक ईवेंट OnSiblingEventFired() कर सकते हैं।

ऐसा लगता है कि यह मेरे लिए कम गड़बड़ है, लेकिन शायद यही कारण है कि आम तौर पर मैंने इस तरह के मुद्दे से कैसे संपर्क किया है।

लेकिन मैं सहमत हूं कि माता-पिता के नियंत्रण में बहुत अधिक जानकारी के बिना यह एमवीसी पैटर्न का पालन नहीं कर रहा है।

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