2008-09-18 7 views
1

J'ai une application WPF avec de nombreux contrôles basés sur la liste dans une fenêtre, qui sont tous liés à différentes collectionsViews.Comment faire pour déterminer WPF SelectedItem pour une fenêtre

Au niveau de la fenêtre, existe-t-il un moyen d'obtenir l'élément sélectionné actuellement pour le contrôle basé sur la liste de mise au point actuellement? Je sais que je peux le faire avec un code assez trivial en cherchant l'élément in focus, mais est-ce que WPF le supporte comme un concept hors de la boîte?

Quelque chose comme Window.CurrentSelectedDataItem serait génial. Je cherche à utiliser ceci comme un moyen de centraliser la gestion des commandes pour activer les commandes de désactivation basées sur un élément de données sélectionné courant.

Merci, Jon

Répondre

1

Je ne pense pas qu'il y ait une propriété que vous spécifiez, mais comme alternative vous pourriez enregistrer un ClassHandler pour l'événement ListBox.SelectionChanged dans votre classe de fenêtre:

EventManager.RegisterClassHandler(typeof(ListBox), ListBox.SelectionChanged, 
    new SelectionChangedEventHandler(this.OnListBoxSelectionChanged)); 

Ceci sera appelé chaque fois que la sélection sera modifiée dans un ListBox de votre application. Vous pouvez utiliser l'argument sender pour déterminer quel ListBox a modifié sa sélection et mettre cette valeur en cache lorsque vous en avez besoin.

0

Je ne l'ai pas essayé, mais vous pouvez essayer d'utiliser un MultiBinding avec un convertisseur pour arriver à l'élément correct:

<MultiBinding Converter="{StaticResource coalesce}"> 
    <MultiBinding.Bindings> 
     <MultiBinding Converter="{StaticResource nullIfFalse}"> 
      <MultiBinding.Bindings> 
       <Binding ElementName="List1" Path="HasFocus" /> 
       <Binding ElementName="List1" Path="SelectedItem" /> 

nullIfFalse renvoie le deuxième paramètre, si le premier est vrai, sinon null. coalesce renvoie le premier élément non nul.

Questions connexes