如何在WPF ItemsControl中获取对象的容器。
我正在使用可绑定的SelectedItem和SelectedItems依赖项属性编写多选树视图。所以一切都很好。唯一的事情是,当我第二次按下ctrl单击树中的项目时,不应选择此项目,而应选择上一个上一个选定的项目。 TreeView包含一个名为ChangeSelection的私有方法。据我所知,第一个参数是Container,第二个参数是TreeViewItem,最后一个是否应该选择项目。
我通过捕获SelectedItemChanged事件来实现多选。
此代码适用于新选择的项目
private void OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var view = ItemContainerGenerator.ContainerFromItem(e.NewValue) as TreeViewItem;
// ...
}
但是如果我想从ObservableCollection中保存的项目中获取TreeViewItem ......它将无法工作。
编辑:好的,我发现了。上面的代码仅适用于第一级项目......答案 0 :(得分:0)
if (treeViewItem.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
{
EventHandler eventHandler = null;
eventHandler = delegate
{
treeViewItem.ItemContainerGenerator.StatusChanged -= eventHandler;
// Call the search function recursive XYZ(tree, treeViewItem.ItemContainerGenerator.ContainerFromItem(nextLevelItem) as TreeViewItem);
};
// wait for the containers to be generated
treeViewItem.ItemContainerGenerator.StatusChanged += eventHandler;
}
else
{
// Call the search function recursive XYZ(tree, treeViewItem.ItemContainerGenerator.ContainerFromItem(nextLevelItem) as TreeViewItem);
}