2010-10-14 14 views
16

मैं अपने मॉडल व्यू में नेस्टेड गुणों से PropertyChanged ईवेंट को बबल करने का सबसे अच्छा तरीका जानने का प्रयास कर रहा हूं। मान लें कि मेरे पास मेरा मॉडल व्यू PersonModelView है जिसमें संपत्ति PersonModelView.Address है। Address बदले में एक संपत्ति City है। जब मैं अपने दृश्य में City से बांधता हूं, तो मैं {Binding Address.City} जैसे कुछ करता हूं।एमओवीएम के साथ व्यूमोडेल गुणों के माध्यम से INotifyPropertyChanged ईवेंट को बबल करने का एक अच्छा तरीका क्या है?

मेरे समस्या यह है कि भले ही Address लागू करता INotifyPropertyChanged, बाध्यकारी अद्यतन नहीं किया जाएगा, क्योंकि यह, PersonModelView पर PropertyChanged से निपटने है नहींAddress है। मुझे लगता है मैं दो विकल्प हैं लगता है: (1) बंधन का स्रोत बदलने (या DataContext बदल) Address संपत्ति के लिए या (2) Address वस्तु पर PersonModelView संभाल PropertyChanged है और Address.City की तरह कुछ के साथ अपने स्वयं PropertyChanged Refire।

आप इसे कैसे हल कर रहे हैं? (मैं मो में एमवीवीएम लाइट टूलकिट का उपयोग कर रहा हूं, लेकिन किसी भी दृष्टिकोण में दिलचस्पी है)

उत्तर

8

Address लागू करता INotifyPropertyChanged और सही ढंग से अपने City संपत्ति पर PropertyChanged घटनाओं को जन्म देती है तो बंधन नोटिस देना चाहिए कि संपत्ति यह स्वाभाविक है बदल गया है करने के लिए।

+0

मैं सहमत हूं। जब कभी एक स्तर या दो नीचे तक सीमित होता है तो मुझे घटनाओं को प्रचारित नहीं करना पड़ता था। संपत्ति नाम के रूप में 'null' के साथ' PropertyChanged' को फायर करने का प्रयास करें और बाध्यकारी कार्य (या आउटपुट विंडो की जांच करें) सुनिश्चित करने के लिए अपने प्रॉपर्टी सेटर में ब्रेकपॉइंट डालें। –

+0

यह एक वास्तविक राहत है, इसे मेरे कोड को बहुत अच्छा बनाना चाहिए। मुझे लगता है कि जब मैंने पहली बार कोशिश की तो मैंने गलती की होगी, मैंने अभी इसे एक नए समाधान में किया है और यह ठीक काम करता है। मदद के लिए बहुत शुक्रिया दोस्तों! – Geoff

1

क्या आपके Address ऑब्जेक्ट INotifyPropertyChanged लागू करते हैं? यदि नहीं, तो मुझे लगता है कि आप जो समस्या देख रहे हैं उसे ठीक करेंगे।

संपादित करें: क्षमा करें, आपने देखा है कि आपने अपनी पोस्ट में उल्लेख किया है कि आपने पहले ही यह कोशिश की है। क्या आपने अपने PersonViewModel में पता ऑब्जेक्ट की PropertyChanged ईवेंट की सदस्यता लेने का प्रयास किया है? ऑन चेंज, आप अपने पता ऑब्जेक्ट पर प्रॉपर्टी चेंज कर सकते हैं।

+0

हाँ यह करता है। तो यदि बाध्यकारी {बाध्यकारी पता.सिटी} है तो पर्सनल मॉडेल दृश्य या पता पर प्रॉपर्टी चेंजेड ईवेंट को बाध्यकारी संभालना चाहिए? (और PersonModelView पाठ्यक्रम का DataContext है) – Geoff

+0

क्या आप अपना कोड पोस्ट कर सकते हैं? ऐसा लगता है कि जिस तरह से आपने इसे स्थापित किया है, उसे काम करना चाहिए। क्या आपने यह सुनिश्चित करने के लिए अपनी 'आउटपुट' विंडो देखी है कि यह सही ढंग से बाध्यकारी है? – JSprang

3

यहाँ एक इतने पर एक समाधान युक्त थ्रेड कैसे बबल सामने इन सूचनाओं के लिए: When nesting properties that implement INotifyPropertyChanged must the parent object propogate changes?

हालांकि, जब एक नियंत्रण के बंधन बिना Address.City पर सेट है IIRC WPF खुफिया स्वचालित रूप से INotifyPropertyChanged सूचनाओं के लिए पता नजर रखने के लिए है PersonViewModel को पता ऑब्जेक्ट की अपडेट अधिसूचनाओं को फिर से प्रसारित करने की आवश्यकता है।

+0

बेन, क्या आप इस प्रश्न को फिर से लिंक करने का मतलब रखते थे? –

+0

एर्म, मुझे लगता है कि यह गलत लिंक है;) ठीक है, मुझे कुछ याद करना होगा। मैंने सोचा कि बाइंडिंग इसे संभाल नहीं सकती थी, मेरे लिए कोड पर वापस! – Geoff

+0

ओह! इसे पकड़ने के लिए धन्यवाद। लिंक सही –

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

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