J'ai un 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 Comment puis-je faire le tabcontrol code> dont les éléments sont liés à un
Observablecollection code>:
SELECTELITEM code> 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 code> reste sur -1 et la nouvelle onglet n'est pas sélectionné. P>
Tabcontrol code> Sélectionner Le nouvel onglet Chaque fois qu'un article est ajouté à la collection vide? p> p>
6 Réponses :
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; p>
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. P>
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.
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>
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?
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}" />
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é
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; Essayez la démo ici: http://demos.telerik.com/silverlight/#tabcontrol/addingandremovingTabs p> Remarque: c'est une démonstration SL, mais ça marche le même dans WPF. P> P>
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}" />
<TabControl ItemsSource="{Binding MyObservableCollection}" SelectedItem="{Binding MyObservableCollection[0]}" />