選択したアイテムを両方向にバインドできるように作成SelectionHelper
しました。
このヘルパーでは、ビューモデルから選択が変更されたときに、最初に選択された項目を呼び出します。呼び出しは正常に返されます。しかし、後で UI のメッセージ キューのどこかで何かが発生し、コレクションの IndexOf が呼び出されます。
UI の仮想化のため、非同期であると思われます。絶対に知りたいアイテムのインデックスです。しかし、なぜアイテムの代わりに置くのか理解できません。
これはバグですか、それとも文書化されていない機能ですか?DataGrid
ScrollIntoView
DataGrid
ItemsControl.ItemInfo
私のコレクションはこれらのインターフェースを実装しています: IList<T>
、IList
、INotifyCollectionChanged
のコードは次のIndexOf
とおりです。
public int IndexOf(object value)
{
if ((value != null && !(value is T))
|| (value == null && typeof(T).IsValueType))
throw new ArgumentException(WrongTypeMessage, "value");
return IndexOf((T)value);
}
そして、期待どおりに例外をスローします=)
アップデート
はい、私の推測は正しかったです。ここにDataGridのコードがありますScrollIntoView
public void ScrollIntoView(object item)
{
if (item == null)
throw new ArgumentNullException("item");
this.ScrollIntoView(this.NewItemInfo(item, (DependencyObject) null, -1));
}
internal void ScrollIntoView(ItemsControl.ItemInfo info)
{
if (this.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
this.OnBringItemIntoView(info);
else
this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, (Delegate) new DispatcherOperationCallback(((ItemsControl) this).OnBringItemIntoView), (object) info);
}
アップデート の問題は、このアップデートで修正されています