मेरे पास दो अवलोकन करने योग्य चयन हैं और मुझे उन्हें एक सूची दृश्य नियंत्रण में दिखाने की आवश्यकता है। इस उद्देश्य के लिए मैंने MergedCollection बनाया जो इन दो संग्रहों को एक पर्यवेक्षण चयन के रूप में प्रस्तुत करता है। इस तरह से मैं अपने विलय संग्रह में ListView.ItemsSource सेट कर सकता हूं और दोनों संग्रह सूचीबद्ध हैं। काम करता है ठीक जोड़ा जा रहा है लेकिन जब मैं एक आइटम निकालने के लिए प्रयास करते हैं, बिना क्रिया का अपवाद दिखाया गया है:मर्ज किए गए वेरिएबल कोलेक्शन
An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll
Additional information: Added item does not appear at given index '2'.
MergedCollection के कोड इस प्रकार है:
public class MergedCollection : IEnumerable, INotifyCollectionChanged
{
ObservableCollection<NetworkNode> nodes;
ObservableCollection<NodeConnection> connections;
public MergedCollection(ObservableCollection<NetworkNode> nodes, ObservableCollection<NodeConnection> connections)
{
this.nodes = nodes;
this.connections = connections;
this.nodes.CollectionChanged += new NotifyCollectionChangedEventHandler(NetworkNodes_CollectionChanged);
this.connections.CollectionChanged += new NotifyCollectionChangedEventHandler(Connections_CollectionChanged);
}
void NetworkNodes_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
CollectionChanged(this, e);
}
void Connections_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
CollectionChanged(this, e);
}
#region IEnumerable Members
public IEnumerator GetEnumerator()
{
for (int i = 0; i < connections.Count; i++)
{
yield return connections[i];
}
for (int i = 0; i < nodes.Count; i++)
{
yield return nodes[i];
}
}
#endregion
#region INotifyCollectionChanged Members
public event NotifyCollectionChangedEventHandler CollectionChanged;
#endregion
}
सादर
कंपोजिट कोलेक्शन INotifyCollectionChanged लागू नहीं करता है। –
@ जोश: यदि आप लिंक का पालन करते हैं, तो आप देखेंगे कि यह करता है। –
:-)। तुम सही हो, केंट। यह बिल्कुल सही है. मैंने लिंक का पालन किया, लेकिन मैंने यह नहीं देखा कि संग्रह लागू करने वाले इंटरफेस दो लाइनों पर हैं! मैंने केवल आईलीस्ट को देखा! –