次の問題があります。wpf リストボックスにバインドされている ICollectionView に単純なリストをロードすると、期待どおりに CurrentChanged イベントが発生します。
List<int> l = new List<int>();
l.Add(1);
l.Add(2);
MyCollection = CollectionViewSource.GetDefaultView(l);
MyCollection.CurrentChanged += MyCollection_CurrentChanged; // ok, it's raised
ただし、データを別のスレッドにロードしていると想像してください。次に、 currentChanged イベントを発生させる同じ動作が必要ですが、機能しません。
List<int> l = new List<int>();
Task.Factory.StartNew(() =>
{
l.Add(1);
l.Add(2);
})
.ContinueWith((r) =>
{
MyCollectio = CollectionViewSource.GetDefaultView(l);
MyCollectio.CurrentChanged += MyCollectio_CurrentChanged; // ko, it isn't raised.
}, TaskScheduler.FromCurrentSynchronizationContext());
UIスレッドで作業するために TaskScheduler.FromCurrentSynchronizationContext() を使用していますが、機能しないことに注意してください。私も Application.Current.Dispatcher.Invoke を試してみましたが、うまくいきませんでした。