मैं यहाँ कुछ है कि वास्तव में मुझे गार्ड से पकड़ रहा है।
मेरे पास T का एक ऑब्ज़र्वेबल कॉलेक्शन है जो वस्तुओं से भरा है। मेरे पास एक इवेंट हैंडलर भी है जो कलेक्शन इवेंट से जुड़ा हुआ है।
जब आप संग्रह को साफ़ करते हैं , तो यह संग्रह के साथ एक संग्रहित घटना का कारण बनता है। ई। सेट के साथ NotifyCollectionChangedAction.Retet। ठीक है, यह सामान्य है। लेकिन अजीब बात यह है कि न तो e.OldItems या e.NewItems में कुछ भी नहीं है। मुझे उम्मीद है कि संग्रह से हटाए गए सभी आइटमों से e.ldItems भरा जाएगा।
क्या किसी और ने इसे देखा है? और यदि हां, तो वे इसके चारों ओर कैसे गए हैं?
कुछ पृष्ठभूमि: मैं किसी अन्य ईवेंट से अटैच और अलग करने के लिए CollectionChanged इवेंट का उपयोग कर रहा हूं और इस प्रकार यदि मुझे e.OldItems में कोई आइटम नहीं मिलता है ... तो मैं उस ईवेंट से अलग नहीं हो पाऊंगा।
विशिष्टता: मुझे पता है कि प्रलेखन एकमुश्त नहीं बताता है कि उसे इस तरह से व्यवहार करना है। लेकिन हर दूसरी कार्रवाई के लिए, यह मुझे सूचित नहीं करता है कि उसने क्या किया है। तो, मेरी धारणा यह है कि यह मुझे बताएगा ... क्लियर / रीसेट के मामले में भी।
नीचे नमूना कोड है यदि आप इसे खुद को पुन: पेश करना चाहते हैं। सबसे पहले xaml:
<Window
x:Class="ObservableCollection.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
Height="300"
Width="300"
>
<StackPanel>
<Button x:Name="addButton" Content="Add" Width="100" Height="25" Margin="10" Click="addButton_Click"/>
<Button x:Name="moveButton" Content="Move" Width="100" Height="25" Margin="10" Click="moveButton_Click"/>
<Button x:Name="removeButton" Content="Remove" Width="100" Height="25" Margin="10" Click="removeButton_Click"/>
<Button x:Name="replaceButton" Content="Replace" Width="100" Height="25" Margin="10" Click="replaceButton_Click"/>
<Button x:Name="resetButton" Content="Reset" Width="100" Height="25" Margin="10" Click="resetButton_Click"/>
</StackPanel>
</Window>
अगला, पीछे का कोड:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
namespace ObservableCollection
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
_integerObservableCollection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(_integerObservableCollection_CollectionChanged);
}
private void _integerObservableCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
switch (e.Action)
{
case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
break;
case System.Collections.Specialized.NotifyCollectionChangedAction.Move:
break;
case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:
break;
case System.Collections.Specialized.NotifyCollectionChangedAction.Replace:
break;
case System.Collections.Specialized.NotifyCollectionChangedAction.Reset:
break;
default:
break;
}
}
private void addButton_Click(object sender, RoutedEventArgs e)
{
_integerObservableCollection.Add(25);
}
private void moveButton_Click(object sender, RoutedEventArgs e)
{
_integerObservableCollection.Move(0, 19);
}
private void removeButton_Click(object sender, RoutedEventArgs e)
{
_integerObservableCollection.RemoveAt(0);
}
private void replaceButton_Click(object sender, RoutedEventArgs e)
{
_integerObservableCollection[0] = 50;
}
private void resetButton_Click(object sender, RoutedEventArgs e)
{
_integerObservableCollection.Clear();
}
private ObservableCollection<int> _integerObservableCollection = new ObservableCollection<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
}
}