Wpf 集合更改时如何获取UIElement?

Wpf 集合更改时如何获取UIElement?,wpf,mvvm,observablecollection,uielement,Wpf,Mvvm,Observablecollection,Uielement,我有一个wpf树视图,它有一个动态的itemssource。用户可以在运行时添加和删除项。 我缺少一个事件,该事件提供了当前添加到treeviews itemsSource的UIElement。所以我想我需要切换到OnCollectionChanged 这就是我所拥有的: // MyItemViewModel is a viewmodel for a TreeViewItem // MyCollection is bound to hte Treeview's ItemsSource

我有一个wpf树视图,它有一个动态的itemssource。用户可以在运行时添加和删除项。 我缺少一个事件,该事件提供了当前添加到treeviews 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;
            }
        }
    }
//MyItemViewModel是TreeItem的viewmodel
//MyCollection绑定到Treeview的ItemsSource
公共类MyCollection:ObservableCollection
{
CollectionChanged上的受保护覆盖无效(NotifyCollectionChangedEventArgs e)
{
开关(电动)
{
案例NotifyCollectionChangedAction。添加:
//我希望将UIelement添加到集合中
//(e.NewItems包含FrameworkElement的DataContext)
打破
}
}
}
我尽可能地遵循MVVM,不想在viewmodel中保留任何视图元素。 我希望在添加项时触发一个事件,该事件在其发送方或EventArgs中提供新添加的UIElement


我已经尝试过ItemContainerGenerator类,但它在viewmodel中没有用处,因为它已经需要UIElement控件。

您似乎从错误的方向看待这个问题。。。在MVVM中,您可以在很大程度上忘记UI。因此,与其考虑如何获取用户添加到UI中的集合控件中的项,不如考虑访问视图模型中添加到数据集合中的数据对象,该数据对象是绑定到UI集合控件的数据,以响应用户启动的
ICommand


因此,对我来说,听起来您需要实现一个
ICommand
,该命令连接到UI中的
按钮
,在该按钮中,您将新项添加到数据绑定集合中,而不是任何事件。这样,您将始终知道所有数据项的状态。

我负责在“Drop”事件中添加项。创建了一个新的viemodel,它绑定到一个分层的treeview数据模板。所以在“Drop”中,我有我的dataitem,但我另外喜欢在新添加的项上调用类似FrameworkElement.BringIntoView()的东西。为了在MVVM中实现这种类型的功能(需要使用类似于
BringIntoView
)的事件,我们创建
附加属性
。更好的方法是:使用附加属性创建行为。我想我走对了路。。