WPF/C#: Comment fait-on référence TabItems à l'intérieur d'un TabControl?
Je suis sûr qu'il y est quelque chose de simple qui me manque, mais je dois avouer qu'en ce moment je suis à une perte.
Je suis ajouter par programme TabItems à mon principal TabControl, un pour chaque compte que l'utilisateur choisit d'ouvrir. Avant la création et l'ajout d'un nouveau TabItem je voudrais vérifier si l'utilisateur a déjà le compte ouvert dans un autre onglet. Je ne veux pas me retrouver avec deux identiques onglets ouverts.
Voici le code que j'ai écrit. J'espère que ça vous donne une idée de ce que je suis en train d'accomplir.
if (tab_main.Items.Contains(accountNumber))
{
tab_main.SelectedIndex = tab_main.Items.IndexOf(accountNumber);
}
else
{
Search s = new Search(queryResults, searchText);
TabItem tab_search = new TabItem();
tab_search.Header = searchString;
tab_search.Name = accountNumber;
tab_search.Content = s;
tab_main.Items.Add(tab_search);
}
Bien sûr, cela ne fonctionne pas correctement. En WinForms le TabControl a un TabPages collection avec un ContainsKey méthode que je pourrais utiliser pour rechercher le nom de l'élément tabpage. Je ne comprends pas ce que les Articles.Méthode contains() est à la recherche d', car elle ne spécifie un objet comme argument et ne fait pas référence au nom de l'élément!
Toute aide est grandement appréciée.
Merci!
OriginalL'auteur Lucifer Sam | 2010-02-17
Vous devez vous connecter pour publier un commentaire.
La
Contains()
méthode est à la recherche pour vous de passer dans le réelTabItem
que vous cherchez, afin de ne pas vous aider. Mais cela va fonctionner:Cast
. TabControl.Éléments estIEnumerable
mais pasIEnumerable<T>
de sorte qu'il ne gère pas directement le LINQ Où l'opérateur directement.Merci pour les réponses! Avant de le modifier, il ne fonctionne pas et j'ai fini par venir avec une autre solution similaire. Certainement m'a fait penser dans la bonne direction! J'ai trouvé une solution très similaire, mais a également eu un suivi de la question que je vais poster comme une autre réponse si quelqu'un a le temps de l'aider!
OriginalL'auteur Ray Burns
Merci pour les réponses! Avant de le modifier, il ne fonctionne pas et j'ai fini par venir avec une autre solution similaire. Certainement m'a fait penser dans la bonne direction! Je ne suis pas encore assez utilisé pour LINQ et les expressions lambda.
Au cas où quelqu'un d'autre est à la recherche de solutions de ce a également travaillé pour moi:
Une dernière question, si quelqu'un est de la lecture de ce... est-il un moyen plus élégant pour sélectionner l'élément à partir matchingItem en mentionnant le nom de la propriété par rapport en supposant que l'élément correct est à la position 0?
INameScope.RegisterName
, puisINameScope.FindName
trouverez. Cependant, ce n'est pas un bon design pour plusieurs raisons que je ne vais pas énumérer ici. Avec WPF, vous devriez être en utilisant MVVM de conception, pas de vieux WinForms de style de conception. Regardez autour de StackOverflow et d'ailleurs, pour en apprendre sur le modèle MVVM.Pour info: en général Débordement de Pile encourage les utilisateurs à demander un "suivi" de questions que de nouvelles questions plutôt que de l'étendre leurs questions. Consultez la FAQ et les discussions en meta.stackoverflow.com pour plus d'informations.
Cool merci pour la correction et de me pointer à MVVM de conception.
OriginalL'auteur Lucifer Sam