2012-05-08 12 views
7

मेरे पास एक ऑब्जेर्जेबल कोलेक्शन से जुड़ी वस्तुओं के साथ एक सूची बॉक्स है।ObservableCollection के साथ ViewModel से UI को रीफ्रेश कैसे करें?

अब, दृश्य मॉडल के भीतर से, मुझे यूआई को अपडेट करने की आवश्यकता है। मेरे पास मेरे व्यू मॉडल से सूची बॉक्स में कोई फर्क नहीं पड़ता है।

अगर मैं अपने ऑब्जर्जेबल कोलेक्शन से कोई आइटम हटा या जोड़ता हूं, तो यूई अपडेट हो जाता है।

कुछ अन्य तर्कों के आधार पर मुझे यूआई अपडेट करने की आवश्यकता है ... लेकिन ऑब्जर्वेबल कोलेक्शन समान है।

मैं अपने पर्यवेक्षण चयन से आइटम जोड़ने या हटाने के बिना UI को कैसे अपडेट कर सकता हूं?

धन्यवाद

+0

वहाँ क्या है अगर संग्रह में कुछ भी नहीं बदला है अद्यतन करने के लिए बदले बिना दृश्य मॉडल से देखने ताज़ा किया:

यह फोन करके हासिल की थी? –

+0

ईमानदारी से ... हमारे पास WPF और MVVM का उपयोग करके एक बड़ा एप्लिकेशन है और हमें इसकी आवश्यकता नहीं है। हमें बताएं कि आप वास्तव में क्या अपडेट करना चाहते हैं, क्योंकि मुझे पूरा यकीन है कि इसे पूरा करने के तरीके हैं। – dowhilefor

+0

यदि आपको अपने संग्रह को संशोधित किए बिना यूआई को अपडेट करने की आवश्यकता है, तो शायद आपको अपने वीएम में किसी अन्य चीज़ को अपने दृश्य में जोड़ना चाहिए ... सब कुछ 'अवलोकन योग्य चयन' के माध्यम से डेटाबेस नहीं होना चाहिए ... – BoltClock

उत्तर

9

आप, क्योंकि आप अपने संग्रह में आइटम संपादित कर लिया है अपने यूआई बदलने की जरूरत है, तो आप उन वस्तुओं INotifyPropertyChanged इंटरफ़ेस को लागू करने के लिए व्यवस्था करनी चाहिए। यदि आपके संग्रह में ऑब्जेक्ट्स में PropertyChanged ईवेंट है, तो UI उस ईवेंट को अलग-अलग आइटमों से सुन रहा होगा। (यदि संभव हो तो, आप भी आइटम अपने संग्रह में बदल DependencyProperties साथ DependencyObjects है, जो एक ही लक्ष्य पूरा करता हो सकती है।)

आप वास्तव में एक यूआई अद्यतन जब अपने संग्रह के बारे में सभी पर कुछ भी नहीं है को गति प्रदान करने की जरूरत है, तो बदल गया है, ऐसा करने का तरीका मैन्युअल रूप से CollectionChanged ईवेंट को उठाना है। यह ObservableCollection<> के साथ नहीं किया जा सकता है, लेकिन आप उस वर्ग से एक नया संग्रह प्राप्त कर सकते हैं, और कुछ नए, public विधि के भीतर से protected OnCollectionChanged विधि को कॉल कर सकते हैं।

+0

प्रतिक्रिया के लिए धन्यवाद ..यह समझ आता है। – user1202434

3

मेरे पास एक समान समस्या है जहां मैं किसी आइटम पर पृष्ठभूमि बदलना चाहता था, लेकिन स्पष्ट रूप से न तो आइटम और न ही संग्रह बदल गया।

CollectionViewSource.GetDefaultView(your_collection_name).Refresh(); 

इस संग्रह

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