J'ai une collection d'objets em> de la base de données em>, chacun contenant des collections de schéma em> objets et utilisateur em> les objets. Je veux les lier à un arbre d'entrevoir, mais ajouter des niveaux statiques supplémentaires dans la hiérarchie, de sorte que l'arbre résultant semble plus ou moins comme ceci: TreeViewItem treeViewItem = new TreeViewItem();
treeViewItem.Header = "All the databases:";
treeViewItem.ItemsSource = server.Databases;
treeView.Items.Add(treeViewItem);
4 Réponses :
Vous devez remplir les propriétés que vous utilisez dans votre liaison avec les données de votre base de données. Actuellement, vous utilisez un nouveau Vous devez charger vos données de base de données et la joindre aux propriétés que vous avez utilisées dans votre modèle WPF en tant qu'artiens de liaison. P> TreeViewItem code>, et l'utilise comme DataSource, donc ce que vous dites à propos de tout voir comme un seul noeud a du sens, comme vous l'avez placé dans un seul noeud . p>
Tony, je ne suis pas sûr de ce que tu veux dire. Bien que j'utilise le nouveau TreeViewItem, je lie la collection de bases de données à l'aide de la propriété ArbreViewItem's itemSource. La collecte de bases de données est automatiquement renseignée par le SMO (je n'ai pas inclus le code de configuration pour éviter d'encombrer mon message avec des détails non pertinents). Pourriez-vous s'il vous plaît fournir un exemple de code qui illustre ce que vous suggérez?
Je suppose que j'ai mal compris votre question initiale. Votre propriété .Databases charge toutes les données dans les propriétés de la classe et de la dépendance que vous utilisez dans vos reliures correctes? Je pensais que vos liaisons n'étaient pas chargées correctement de votre DataSource. Mais ne semble pas être le problème.
Le problème est qu'un arbreView n'est pas très bien adapté à ce que vous voulez activer: il s'attend à ce que toutes les sous-notes soient du même type. Lorsque votre noeud de base de données a un nœud de type collection Le code ci-dessous fait ce que vous voulez que je pense, tout en étant aussi proche que possible de votre intention d'origine: p>
Une arborescence ne s'attend parfaitement pas à ce que toutes les sous-notes soient du même type. Voir, par exemple, CODEPLEX.COM/COMPLEXDATEMATEMLES .
Ok, je me trompe peut-être à ce sujet. Peut-être que le seul problème est que le contenu par défaut d'un arbreViewItem ne prend pas en charge la notion d'un élément sélectionné (une liste de liste). L'article que vous mentionnez semble offrir une solution de contournement, ne prouvant pas du fait que les ignifuges sur le même niveau doivent avoir du contenu du même type.
Merci pour votre contribution! Je confirme le commentaire de Robert que TreeView ne s'attend pas à ce que tous les sous-notes soient du même type. Malheureusement, votre approche ne fonctionne pas tout cela bien. Bien que cela permet également de sélectionner des nœuds de niveau de feuille (quelques progrès), il sélectionne toujours le sous-arbre complet si je clique sur le nom de la base de données, laissant uniquement un rectangle blanc (non sélectionné) dans lequel la liste est.
Étrange, ça ne se produit pas ici. Êtes-vous sûr d'avoir utilisé mon XAML exact?
Mon erreur. Je n'ai pas remarqué que vous avez incorporé l'arbre rootviewItem directement dans un StackPanel plutôt que dans l'arbre d'arbre. Il se rapproche certainement de ce que je cherchais, mais je ne peux toujours pas sélectionner de noeud de base de données (tel que "DB1") et que, malheureusement, est requis pour mon scénario.
Désolé, je passe. J'espère que je vous ai donné de nouvelles idées. Faites-nous savoir comment vous avez résolu!
oh man est une tâche incroyablement frustrante. J'ai essayé de le faire moi-même plusieurs fois. J'ai eu une exigence très similaire où j'ai quelque chose comme une classe client qui a à la fois une collection d'emplacements et une collection de commandes. Je voulais des emplacements et des ordres d'être des "dossiers" dans la vue d'arborescence. Comme vous l'avez découvert, tous les exemples d'Aperview qui vous montrent comment se lier à des types d'auto-référencement sont à peu inutiles.
J'ai d'abord eu recours à la construction manuelle d'un arbre de folderitindemnode et d'objets itemnode que je produisais dans la vue, mais Cela a vaincu le but de contraignant car il ne répondrait pas aux changements de collecte sous-jacents. P>
Puis je suis arrivé à une approche qui semble bien fonctionner. p>
Le XAML résultant semble similaire au code ci-dessous et vous pouvez Saisissez un fichier zip qui possède toutes les classes et XAML dans un exemple de travail . p> P> P>
Toute chance que l'exemple de travail que vous avez fourni existe toujours? J'ai juste essayé d'y accéder et le lien apparaît brisé.
Voici une modification de la solution de Josh pour travailler avec SMO (mon énoncé de problème d'origine): et le convertisseur modifié: p>