2012-06-30 13 views
7

मैं CollectionViewSource पर आइटम्स नियंत्रण को बाध्य कर रहा हूं। यहां कोड है:संग्रह दृश्य दृश्य संसाधन परिवर्तन पर पुन: क्रमबद्ध नहीं है

this.Trucks = new ObservableCollection<Truck>(); 
      foreach (var truck in DataRepository.Trucks.Where(t => t.ReadyDate.Date.Equals(this.Date))) 
      { 
       this.Trucks.Add(truck); 
      } 

      this.TrucksSource = new CollectionViewSource { Source = this.Trucks }; 
      this.TrucksSource.SortDescriptions.Add(new SortDescription("ReadyAddress.Region.RegionNumber", ListSortDirection.Ascending)); 
      this.TrucksSource.SortDescriptions.Add(new SortDescription("TruckId", ListSortDirection.Ascending)); 

जब मैं शुरुआत में बाध्य करता हूं - सॉर्टिंग काम करता है। जब मैं ऑब्जर्जेबल कोलेक्शन में आइटम जोड़ता हूं - यह उचित स्थान पर डाला जाता है, यह अच्छा है। लेकिन जब मैं उस संपत्ति को बदलता हूं जिसे मैं क्रमबद्ध करता हूं - इस आइटम को सूची में "स्थानांतरित नहीं किया जा रहा" है।

ReadyAddress.Region.RegionNumber ठीक से INotifyProperty बढ़ाता है और मैं इसे बाध्य क्षेत्रों में देखता हूं, लेकिन ऑर्डर नहीं बदलता है। क्या मुझे ऐसा कुछ उम्मीद है जो ऐसा नहीं होना चाहिए या इसे संभालने का बेहतर तरीका है?

+0

कृपया [सॉर्ट डिस्क्रिप्शन और स्वचालित सॉर्ट किए गए ऑर्डर रीफ्रेश] के लिए मेरा उत्तर देखें (http://stackoverflow.com/a/7372522/620360)। – LPL

+0

डब्ल्यूपीएफ 4.5 में नई सुविधा है जिसे लाइव आकार कहा जाता है जो इस समस्या को हल करता है लेकिन अगर आप रीफ्रेश को कॉल नहीं करना चाहते हैं तो आपको एलपीएल द्वारा लिंक की गई विधि का उपयोग करना पड़ सकता है। – Kris

+0

मैं उस संपत्ति पर PropertyChanged को कॉल करके इसे ठीक करने में सक्षम था जो दृश्य को उजागर करता है, दृश्य को रीफ्रेश करने (और सॉर्ट को साफ़ करने) और फिर सॉर्ट विवरण जोड़ना। – PatFromCanada

उत्तर

5

सभी जवाब मैंने पाया View.Refresh() उल्लेख किया, लेकिन उस बड़े सूचियों के लिए बहुत अच्छा समाधान नहीं है। मैं जो कर रहा हूं वह Remove() और Add() इस आइटम पर था। फिर इसे पूरी सूची को पुनः लोड किए बिना ठीक से पुनर्स्थापित किया गया था।

सावधानी का शब्द! यह मेरे काम के लिए काम करता है, लेकिन आपके मामले में ऑब्जेक्ट को हटाने और पुनः जोड़ने से आपके कोड को कैसे लिखा जाता है, इसके आधार पर साइड इफेक्ट हो सकता है। मेरे मामले में यह यूआई प्रभाव के साथ एक सूची है जहां नए आइटम संक्रमण के साथ दिखाई देते हैं, इसलिए ताज़ा करने से पूरी सूची में संक्रमण दिखाई देगा जहां अच्छी तरह से निकालें/जोड़ता है यह दिखाता है कि आइटम को कैसे स्थानांतरित किया जाता है।

4

क्या आपने अपने संग्रहदृश्य संसाधन को रीफ्रेश करने का प्रयास किया है?

this.TruckSource.View.Refresh(); 
+3

हां, लेकिन मुझे यह पसंद नहीं है - यह पूरे दृश्य को रीफ्रेश करता है – katit

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