¿Por qué exactamente no implementa la propiedad, no sé, pero tengo una sugerencia a continuación.
Su código anterior funcionará, sin embargo, no es lo que hace la propiedad IsSynchronizedWithCurrentItem. Any ItemsControl se une a la propiedad ICollectionView de ItemsSource. Para obtener ese ICollectionView, podemos llamar a CollectionViewSource.GetDefaultCollectionView (objeto o). Dependiendo del tipo de objeto o, se obtiene una implementación concreta diferente de la interfaz ICollectionView. CollectionView y ListCollectionView son dos clases concretas que vienen a la mente.
La interfaz ICollectionView contiene un miembro llamado CurrentItem. Lo que IsSynchronizedWithCurrentItem hace es: cada vez que se hace clic en un elemento en ItemsControl, establece el elemento actual para la vista de colección. ICollectionView también tiene dos eventos: CurrentItemChanging y CurrentItemChanged. Cuando se establece la propiedad IsSynchronizedWithCurrentItem, ItemsControl actualizará el SelectedItem en función de lo que es CurrentItem de ICollectionView. ¿Tiene sentido?
En maestro/detalle escenarios WPF, simplemente son vinculantes para ICollectionViews y su CurrentItem (la sintaxis CurrentItem es algo así como {Elementos de unión/Name}, donde nombre es la propiedad Name en CurrentItem de la colección.
Así . a pesar de que el código funciona para sus propósitos, que no hace lo que hace que la propiedad para hacer lo que hace la propiedad, que tiene que hacer lo siguiente:
- Cuando se selecciona un elemento, es necesario averiguar qué colección a la que pertenece. ¿Cómo hacemos esto? Creo que esta es la razón por TreeView no lo implementa. El elemento seleccionado se muestra en un TreeViewIte metro. El DataContext es el objeto en sí, pero ¿cuál es la colección principal? Supongo que para obtenerlo, puedes guardarlo en algún hashmap (tonto, pero funcionará) o puedes subir al árbol lógico y obtener el elemento principal TreeViewItem que resulta ser un ItemsControl. La propiedad ItemsSource será su colección.
- Obtenga ICollectionView para esa colección.
- necesario que convierta en un ICollectionView que CollectionView (ICollectionView no implementa CurrentItem colocador)
- setCurrent de llamadas (.., ..) en la instancia CollectionView
Ahora, todo lo que está ligado a ese CurrentItem de ICollectionView se actualizará.
Esto se hizo más largo de lo que esperaba. Avíseme si es necesaria alguna otra aclaración.
¿Por qué no se acepta esta respuesta? – Dabblernl