डब्ल्यूपीएफ सूची सूची में वस्तुओं की एक सूची/संग्रह बाध्यकारी, लेकिन यूआई अपडेट किए जाने के बाद रीफ्रेशिंग नहीं, हल।
मैं सिर्फ बेवकूफ हूँ। जबकि मैं List<>
के बजाय ObservableCollection<>
का उपयोग करने के बारे में बहुत कुछ पढ़ता हूं, मैंने अभी भी इस सुझाव को अनदेखा करना जारी रखा है और इसका कोई फायदा नहीं हुआ है। मेरी किताबों पर वापस आ गया और फिर से पढ़ा। यह बहुत अच्छी तरह से समझाया गया है कि ObservableCollection<>
का उपयोग करना आवश्यक है क्योंकि List<>
INotifyCollectionChange
इंटरफ़ेस को ListBox
के लिए आवश्यक नहीं है जब आइटम संग्रह में आइटम बदलते हैं।
इस अद्यतन कोड है:
private ObservableCollection<StringWrapper> m_AppLog;
ObservableCollection<StringWrapper> Log { get { return m_AppLog; } }
सुंदर सरल है, और कुछ और की आवश्यकता नहीं है (उदाहरण के लिए ताज़ा())।
// notify bound objects
OnPropertyChanged("Log");
ObservableCollection
एक धागा है जो इसे का निर्माण नहीं किया द्वारा एक अद्यतन का समर्थन नहीं करता: क्योंकि ObservableCollection परिवर्तन घटना को ट्रिगर का ही ख्याल रखता है, मैं अनावश्यक कॉल दूर करने के लिए कर रहा था। मेरी सूची (एक दृश्य लॉग हाल में हुई त्रुटियां/जानकारी संदेश दिखाने के लिए) क्योंकि विभिन्न धागे से अद्यतन किया जा सकता है, मैं अपने कोड अद्यतन सुनिश्चित करने के लिए इस तरह से समायोजित करने के लिए जोड़ने सूची के अपने डिस्पैचर साथ किया गया था:
public void AddToLog(string message) {
if (Thread.CurrentThread != Dispatcher.Thread) {
// Need for invoke if called from a different thread
Dispatcher.Invoke(
DispatcherPriority.Normal, (ThreadStart)delegate() { AddToLog(message); });
}
else {
// add this line at the top of the log
m_AppLog.Insert(0, new StringWrapper(message));
// ...
यह भी ध्यान रखें कि ObservableCollection<>
List<>
के विपरीत RemoveRange()
का समर्थन नहीं करता है। सूची से ऑब्जर्जेबल कोलेक्शन में स्विच करते समय यह आवश्यक समायोजन का हिस्सा है।
क्या आप "संग्रह में परिवर्तन करते समय, सभी आइटम अपनी स्थिति अपडेट करते समय" के बारे में अधिक जानकारी दे सकते हैं, बस इतना ही मैं सुनिश्चित कर सकता हूं कि मैं आपके प्रश्न का सही उत्तर दे रहा हूं? – Donnelle