動的アイテムソースを持つ wpf Treeview があります。ユーザーは実行時に項目を追加および削除できます。ツリービューのitemsSourceに追加された現在追加されているUIElementを提供するイベントがありません。したがって、OnCollectionChanged に切り替える必要があると思います。
これは私が持っているものです:
// MyItemViewModel is a viewmodel for a TreeViewItem
// MyCollection is bound to hte Treeview's ItemsSource
public class MyCollection : ObservableCollection<MyItemViewModel>
{
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
// i like to have the UIelement which was added to the collection
// (e.NewItems contains the FrameworkElement's DataContext)
break;
}
}
}
できる限りMVVMに従っていますが、ビューモデルにビュー要素を保持したくありません。アイテムが追加されたときに発生するイベントが好きです。これにより、新しく追加された UIElement がその送信者または EventArgs に提供されます。
私はすでに ItemContainerGenerator クラスを試しましたが、既に UIElement コントロールを必要とするため、ビューモデル内では役に立ちません。