আমার এখানে কিছু আছে যা আমাকে সত্যিই প্রহরী থেকে ধরে ফেলছে।
আমার কাছে টির একটি পর্যবেক্ষণযোগ্য সংগ্রহ রয়েছে যা আইটেমগুলিতে পূর্ণ। কালেকশন চেঞ্জড ইভেন্টের সাথে আমার একটি ইভেন্ট হ্যান্ডলার সংযুক্ত রয়েছে।
আপনি যখন সংগ্রহটি সাফ করেন তখন এটি একটি কালেকশন-পরিবর্তিত ইভেন্টের কারণ হয়। ঠিক আছে, এটাই স্বাভাবিক। তবে কী অদ্ভুত তা হ'ল e.OldItems বা e.NewItems এর মধ্যে কিছু নেই। আমি আশা করব যে E.OldItems সংগ্রহ থেকে সরানো সমস্ত আইটেম পূরণ করা হবে।
এটা কি আর কেউ দেখেছে? এবং যদি তা হয়, তবে তারা কীভাবে এটি চারপাশে অর্জন করেছে?
কিছু ব্যাকগ্রাউন্ড: আমি অন্য ইভেন্ট থেকে সংযুক্ত করতে এবং আলাদা করার জন্য কালেকশন চেঞ্জড ইভেন্টটি ব্যবহার করছি এবং এইভাবে যদি আমি E.OldItems এ কোনও আইটেম না পাই ... তবে আমি সেই ইভেন্ট থেকে বিচ্ছিন্ন হতে পারব না।
স্পষ্টকরণ: আমি জানি যে ডকুমেন্টেশনটি এইভাবে আচরণ করতে হবে তা প্রকাশ্যভাবে জানায় না । তবে অন্য প্রতিটি ক্রিয়াকলাপের জন্য, এটি এটি কী করেছে তা আমাকে অবহিত করছে। সুতরাং, আমার ধারণাটি হ'ল এটি আমাকে বলবে ... ক্লিয়ার / রিসেটের ক্ষেত্রেও।
নীচে নমুনা কোডটি যদি আপনি নিজের প্রজনন করতে চান তবে নীচে। প্রথমে এক্সএল থেকে:
<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 };
}
}