10
votes

WPF - Databind à un StackPanel à l'aide de dataMPates

J'ai modifié ma question car elle a changé de concentration en essayant des choses. J'ai réduit le problème jusqu'aux suivants ...

J'essaie de lier l'élément sélectionné d'une arborescence à un StackPanel (ou d'un autre conteneur pouvant contenir des contrôles utilisateur). Ce conteneur affichera ensuite un UserControl, en fonction du type de l'élément sélectionné. P>

Voici le XAML de StackPanel (TreeView et StackPanel sont dans la même fenêtre ==> Différentes colonnes de grille) P>

<TextBox Name="textBox1" Text="{Binding}" />


0 commentaires

3 Réponses :


0
votes

Bien que vous ayez défini la liaison sur le deuxième contrôle personnalisé, définissez-vous le DataContext, car la liaison est l'itinéraire sur les informations et que le DataContext est l'information qu'il applique ces informations de liaison à.

Andrew


1 commentaires

Oui, DataContext est défini dans le contrôle personnalisé comme celui-ci ... (très simplifié bien sûr) ModelObject C = Repo.getByID (3295123); ViewModeltree VMT = Nouvelle viewModeltree (c); base.datacontext = VMT; Pourrait-il être que je ne lie que le DataContext du contrôle de l'utilisateur, pas de la fenêtre et donc non visible par d'autres contrôles dans la fenêtre?



0
votes

Vous pouvez créer un UserControl pour afficher l'arborescence et les informations de sélection à droite, tout en un. Cela vous permet de créer un contrôle personnalisé. Un contrôle personnalisé est essentiellement inutile puisque vous ne créez rien qui n'existait pas avant. XXX

Tout autre comportement personnalisé, je suis sûr que vous pourriez créer ou définir des styles / modèles ici.

Aussi, vous pourriez trouver l'une de mes autres Réponse s utile.

bonne chance avec WPF, acclamations.


1 commentaires

Merci. C'est ce que j'ai essayé d'accomplir maintenant, seulement directement dans la fenêtre XAML (pas un UserControl). Bien que la sélection des commandes de détail (utilisateur) dans la StackPanel ne fonctionne pas, le texte affiche le type de l'élément d'arborescence sélectionné.



11
votes

Remplacez le StackPanel dans votre exemple avec contentpresenter et au lieu de DataContext Définissez la propriété Contenu. Cela devrait fonctionner.


3 commentaires

Exactement! DataContext ne veut rien dire, c'est juste pour être contraignant. La propriété de contenu est ce qui est là pour présenter des choses.


Merci beaucoup. Cela fonctionne bien. Toute entrée sur la raison pour laquelle cela n'a pas fonctionné à l'aide de la StackPanel?


Comme Oleg l'a dit, DataContext ne veut rien dire par lui-même, il s'agit simplement d'où toutes les liaisons ci-dessous fonctionneront. Pensez-y comme définir un cadre de pile ou une portée variable pour regarder dans. Ce dont vous avez besoin était de créer une liaison et de l'avoir évaluée et affichée, ce qui est ce que le contenuPRESENTER (pour un seul élément) ou les articlesPRESENTER (pour une collection) est Fait pour Faite pour sert pour sert à. Essayez d'examiner le contenu des présentateurs et des datatempates et voyez comment ils interagissent. Je ne sais pas de bons poteaux de blog, mais il y en a probablement un peu de temps là-bas.