为什么它不执行该属性,我不知道,但我有一个建议下面。
上面的代码可以工作,但不是IsSynchronizedWithCurrentItem属性的作用。任何ItemsControl绑定到ItemsSource属性的ICollectionView。要获得该ICollectionView,我们可以调用CollectionViewSource.GetDefaultCollectionView(object o)。根据对象o的类型,您将获得不同的ICollectionView接口的具体实现。 CollectionView和ListCollectionView是想到的两个具体类。
ICollectionView接口包含一个名为CurrentItem的成员。 IsSynchronizedWithCurrentItem的作用是:只要在ItemsControl上单击一个项目,它就会为集合视图设置CurrentItem。 ICollectionView还有两个事件:CurrentItemChanging和CurrentItemChanged。当设置IsSynchronizedWithCurrentItem属性时,ItemsControl将根据ICollectionView的CurrentItem是什么来更新SelectedItem。说得通?
在主/ WPF的情况下,我们只需绑定到ICollectionViews及其CURRENTITEM(该CURRENTITEM语法是一样的东西{绑定表项/名称},其中名称是对集合的CURRENTITEM Name属性。
所以。虽然你的代码适用于你的目的,它不这样做,物业确实做什么的财产做什么,你需要做到以下几点:
- 当一个项目被选中,你需要弄清楚哪些我们如何做到这一点?我相信这就是为什么TreeView没有实现它。所选的项目显示在TreeViewIte中米DataContext是对象本身,但父集合是什么?我想要得到它你可以缓存它在一些hashmap(愚蠢的,但将工作),或者你可以走上逻辑树,并得到TreeViewItem的父母碰巧是一个ItemsControl。 ItemsSource属性将是您的集合。
- 获取该集合的ICollectionView。
- 需要该ICollectionView铸造成的CollectionView上的CollectionView实例
现在(ICollectionView不执行CURRENTITEM二传手)
呼叫的setCurrent(..,..),绑定到任何东西ICollectionView的CurrentItem将被更新。 这变得比我预期的要长。让我知道是否有任何进一步的澄清是必要的。
为什么这个答案不被接受? – Dabblernl 2012-07-28 20:38:20