11
votes

Comment vous assurer que mon TabControl WPF a toujours un onglet sélectionné lorsqu'il contient au moins un onglet?

J'ai un tabcontrol dont les éléments sont liés à un Observablecollection : xxx

Les onglets sont ajoutés et supprimés comme prévu comme prévu sont ajoutés et supprimés de la collection. Cependant, le SELECTELITEM revient à -1 (ce qui signifie qu'il n'y a pas d'onglet sélectionné) chaque fois que la collection est vide. Ensuite, lorsqu'un élément est ajouté, le sélectionnétem reste sur -1 et la nouvelle onglet n'est pas sélectionné.

Comment puis-je faire le Tabcontrol Sélectionner Le nouvel onglet Chaque fois qu'un article est ajouté à la collection vide?


0 commentaires

6 Réponses :


0
votes

Vous êtes le meilleur pari est de remplacer probablement la fonctionnalité "OntabAdded" pour vérifier si un nouveau (premier) est ajouté, puis réglage de la sélection sélectionnéeMindex sur 0;

Depuis que vous utilisez Observablecollection, vous savez lorsque votre collection change, je vous abonner à l'événement modifié forme la collection et vérifiez le nombre d'éléments de l'information.


1 commentaires

J'ai déjà essayé de définir la sélection sélectionnée sur 0 dans le gestionnaire d'événements de collectionChanged et il n'avait peut-être aucun effet - peut-être que mon gestionnaire a été appelé avant que l'événement atteigne le TabControl.



12
votes

Il pourrait y avoir un moyen plus facile, mais vous pouvez accrocher la collection Modification de l'événement sur l'observaBaCollection de votre VM et définir la propriété sélectionnée sur le nouvel élément (en supposant que vous disposez de l'élément sélectionné lié à une propriété sur la machine virtuelle). < / p>


4 commentaires

J'utiliserais SeleyItem plutôt que d'indexer, mais c'est plus une chose personnelle.


Fonctionne bien avec Synchronatem mais pas avec la sélection de sélectionnée. Néanmoins, la mission accomplie!


@Graeme - j'ai dit SELECTELITEMEM, pas index .. sonne comme si vous êtes en désaccord avec moi :-)


Ce serait bien de savoir pourquoi les œuvres de SELECTEMITEM mais SELECTIONNIDEX ne - aucune idée?



2
votes

Si vous recherchez une implémentation pure MVVM, ajoutez une propriété Index à la vue de la vue et sur la collectionchangted, vous pouvez définir index = 0 s'il n'y a pas d'éléments à l'intérieur. Et dans le XAML, vous pouvez lier cet index comme ci-dessous

<TabControl ItemsSource="{Binding MyObservableCollection}" SelectedIndex="{Binding Index}" />


2 commentaires

C'est exactement ce que j'avais initialement fait, mais je pense que je manipulais la manipulation de l'événement avant que le tabcontrol n'en ait eu aucun effet. Je vais lui donner un autre aller - peut-être que j'ai eu quelque chose de mal!


Assurez-vous que votre récepteur d'index augmente l'événement de l'état de propriété



4
votes

Ce que vous pouvez faire est de vous abonner à TabControl.ItemContagerenerator.StatusChanged Event et si l'état est ContenersGéneraté et que la sélection de tabcontrol est -1, puis pour rendre la sélection sélectionnée de tabcontrol 0; xxx P> Il existe des solutions de parti 3 ème qui a cette fonctionnalité hors de la boîte. Le Radtabcontrol de Telerik sélectionne le premier élément chaque fois que la collection change son état de vide sur "contenant un élément unique".

Essayez la démo ici: http://demos.telerik.com/silverlight/#tabcontrol/addingandremovingTabs

Remarque: c'est une démonstration SL, mais ça marche le même dans WPF.


0 commentaires

0
votes

J'ai eu le même problème et j'ai réussi à le réparer en liaison de l'élément sélectionné au premier élément de la liste dynamique.

<TabControl ItemsSource="{Binding MyObservableCollection}" SelectedItem="{Binding MyObservableCollection.First}" />


0 commentaires

0
votes
<TabControl ItemsSource="{Binding MyObservableCollection}" SelectedItem="{Binding MyObservableCollection[0]}" />

0 commentaires