2009-10-14 19 views
8

मेरे पास दो पर्यवेक्षण चयन सूची हैं, जिन्हें मैं एकजुट करना चाहता हूं।संघ दो पर्यवेक्षण चयन सूची

ObservableCollection<Point> unitedPoints = observableCollection1.Union(observableCollection2); 

ObservableCollection1/2 प्रकार ObservableCollection का भी कर रहे हैं: विधि - मेरी भोली दृष्टिकोण संघ इस्तेमाल किया गया। लेकिन संकलक इस लाइन के लिए निम्न त्रुटि फेंकता है:

प्रकार "System.Collections.Generic.IEnumerable" निहित नहीं बदला जा सकता करने के लिए "System.Collections.ObjectModel.ObservableCollection"। एक स्पष्ट रूपांतरण पहले से मौजूद है। (शायद एक रूपांतरण गुम है)

(शब्द सटीक नहीं हो सकता है, जैसा कि मैंने इसे जर्मन से अनुवादित किया है)।

कोई भी जानता है कि पर्यवेक्षण चयन दोनों को कैसे विलय करना है और परिणामस्वरूप एक पर्यवेक्षण चयन प्राप्त करना है?

अग्रिम धन्यवाद, फ्रैंक

एडिथ कहते हैं: मैं सिर्फ महसूस किया कि यह है कि मैं एक Silverlight-3-आवेदन को विकसित करने, क्योंकि वर्ग "ObservableCollection" SL3 और .NET3.0 में भिन्न होते हैं उल्लेख करना महत्वपूर्ण है परिदृश्यों।

उत्तर

10

LINQ Union एक्सटेंशन विधि एक आईनेमरेबल लौटाती है। तो आप क्या कर सकते हैं

var unitedPoints = new ObservableCollection<Point>(); 
foreach (var p in observableCollection1.Union(observableCollection2)) 
    unitedPoints.Add(p); 

आप एक ToObservableCollection करना चाहते हैं:

public static class MyEnumerable 
{ 
    public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> source) 
    { 
     var result = new ObservableCollection<T>(); 
     foreach (var item in source) 
      result.Add(item); 
     return result; 
    } 
} 

अब अपनी लाइन है:

var unitedPoints = observableCollection1.Union(observableCollection2).ToObservableCollection(); 
-: आप परिणाम संग्रह करने के लिए प्रत्येक आइटम की गणना और जोड़ने की आवश्यकता होगी
+0

अच्छा जवाब - लेकिन क्या आपका मतलब था कि 'के लिए' नहीं? – kiwipom

+0

याप, यह foreach – Aaginor

+0

ooops, हाँ foreach, जावास्क्रिप्ट और सी # के बीच फ़्लोटिंग आपको यह कर देगा। – AnthonyWJones

8

क्या आप मौजूदा सामग्री को मर्ज करना चाहते हैं, लेकिन फिर मूल रूप से स्वतंत्र सूचियां हैं? यदि हां, तो यह है कि अपेक्षाकृत आसान है:

ObservableCollection<Point> unitedPoints = new ObservableCollection<Point> 
    (observableCollection1.Union(observableCollection2).ToList()); 

हालांकि, अगर आप एक नमूदार संग्रह जो प्रभावी रूप से दूसरों पर एक "दृश्य" है चाहता हूँ, मुझे लगता है कि ऐसा करने के लिए सबसे अच्छा तरीका है यकीन नहीं है ...

+0

मैंने इसे पहले से ही करने की कोशिश की, लेकिन ऑब्जर्जेबल कोलेक्शन के कन्स्ट्रक्टर में कोई ओवरलोड नहीं था जो पैरामीटर स्वीकार करता था ... और फिर मुझे एहसास हुआ कि सिल्वरलाइट में अवलोकन योग्य चयन .NET 3.0 में OberservableCollection के लिए अलग है। क्या? मैंने सोचा कि मैं सिल्वरलाइट में डेस्कटॉप ऐप्स से एक ही कक्षा का उपयोग कर सकता हूं? यह कैसे काम करना चाहिए, जब दोनों परिदृश्यों में भी ऐसी बुनियादी कक्षाएं भिन्न होती हैं? वे अलग-अलग वर्गों को समान नाम देने के बारे में भी सोच सकते हैं? यह बिल्कुल अजीब है। और क्या काम करता है * थोड़ा सा * अलग तो ... – Aaginor

+0

क्या आप वाकई अलग-अलग कक्षाएं हैं? या यह सिर्फ इतना है कि सिल्वरलाइट संस्करण में कुछ विधियों/रचनाकार गायब हैं? –

+0

@Aaginor: मानक चीजों के साथ आम तौर पर कई चीजों के सिल्वरलाइट कार्यान्वयन .नेट पुस्तकालयों को अक्सर काफी सरल बना दिया जाता है। जब हम किसी चीज का उपयोग करते हैं तो हम पहले से ही परिचित हैं, फिर से अपने दस्तावेज़ों को फिर से जांचना बहुत परेशान है। यह विशेष रूप से परेशान है कि SL3 दस्तावेज़ अभी भी केवल chm (या ऑनलाइन) रूप में हैं :( – AnthonyWJones

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