7
votes

XAML et WPF - Passer des variables à XAML Windows

Je suis plutôt nouveau sur WPF et j'essaie de charger une fenêtre XAML et de transmettre une variable à ce XAML dans son constructeur, car j'en ai besoin pour charger des éléments de cette variable passée.

Quelqu'un pourrait-il me diriger vers la direction de comment y aller s'il vous plaît? Comment démarrez-en une fenêtre XAML et lui donner une variable s'il vous plaît?

Merci d'avance .. Erika


0 commentaires

4 Réponses :


2
votes

Typiquement, dans WPF, vous créeriez les éléments que vous souhaitez charger et définir la fenêtre (ou UserControl) S DataContext sur la classe contenant vos éléments. Vous pouvez ensuite se lier directement à ceux-ci afin de faire un affichage personnalisé à partir du XAML.


9 commentaires

J'aurais peut-être pu être clair dans ma question (ou je ne voudrais pas ne pas vous comprendre! Je suis très nouveau à WPF), qu'est-ce que je tente de faire est de passer un objet à la fenêtre XAML afin que les contrôles, qui sont déjà créés Et tels affichera le contenu transmis de l'objet si c'est ce que vous vouliez dire, serait-il possible de fournir un exemple rugueux s'il vous plaît? J'apprécierais vraiment merci!


Votre arrière-plan est-il des formulaires Windows? Autres bibliothèques dans différentes langues? Cela vous aidera à vous diriger dans la bonne direction ...


Pour le moment, tout ce qui est dans WPF / XAML Windows, toutes les bibliothèques sont en C #


C # et je ne suis pas trop brillant, mais je gère habituellement mon chemin autour


Eh bien, MVVM fonctionne bien pour cela - mais cela peut être déroutant d'abord, puisque WPF a beaucoup à apprendre. J'ai écrit une longue série ici: ReedcOPSEY.com/series/windows-Forms-à- MVVM peut-être que cela aidera.


Ma suggestion est essentiellement de faire (ce qui est, à son noyau) MVVM. Utilisez le contexte de données et liez les objets. Jusqu'à ce que vous lisiez dessus, il peut être difficile de comprendre pourquoi c'est mieux - le lien ci-dessus est une introaction décente, imo.


Merci beaucoup de roseaux, c'est un site Web fantastique et je l'examine actuellement en essayant de comprendre cette entreprise MVVM! Une question toutefois (prouve probablement que je suis toujours en train d'essayer d'accéder à cette nouvelle architecture), cependant, est-ce que cela s'applique également lorsque je souhaite définir quelque chose avant / pendant le chargement de la fenêtre XAML? Par exemple, j'ai une fenêtre, l'utilisateur clique sur quelque chose puis apparaît des informations en fonction de ce qu'il a cliqué. Désolé si je suis une nuisance! et merci beaucoup encore une fois


* Les informations sont affichées sur une nouvelle fenêtre par exemple, de sorte que je devrais savoir ce qui avait été cliqué avant


Erika: Le "truc" est de commencer à penser en deux termes - il y a ce que l'utilisateur voit (la fenêtre, etc.), et que se passe-t-il dans les coulisses (la logique de votre application). Si vous souhaitez qu'un "utilisateur cliquez sur" pour modifier quelque chose de logiquement, vous utiliseriez une commande - ce qui permet à votre viewModel de changer. La vue "changer" va suivre l'image de vue automatiquement en raison de la liaison de données.



9
votes

Essayez d'utiliser le motif MVVM (Modèle-ViewModel).

Vous avez besoin de modèle: p>

<UserControl x:Class="SomeApp.View"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
<Grid>
    <TextBlock Text="{Binding Name}" />
<Grid>    
<UserControl>


2 commentaires

Bonjour, merci pour l'excellente réponse, j'essaie toujours de l'essayer et à l'heure actuelle. J'ai compris la partie contraignante, mais je pense que cela se réfère davantage à quand je veux définir le contenu dans une fenêtre XAML du code de la XAML elle-même? Ou est-ce que cela s'applique lorsque je souhaite définir une propriété sur ma fenêtre XAML pendant le chargement? Dans ce cas, comment devrais-je appeler cela pour faire ce dernier pls?


Comme j'ai compris votre question, vous souhaitez transmettre des données sur le formulaire WPF. Vous pouvez le faire avec l'initialisation de son DataContext. Vous n'avez pas besoin d'écrire un constructeur de formulaire spécial ni autre code. Et le mécanisme de liaison vous aidera à afficher des données et à attraper ses modifications.



0
votes

Mon problème était que je voulais accéder à une classe en dehors de la fenêtre XAML, ne communiquez pas avec le code relatif via une liaison. Pour cela, tout ce que je devais faire était de créer une classe statique pour contenir la valeur que j'ai requise. Simple, mais la solution m'a échappé à ce point. C'est une façon plutôt sale de faire de la résolution du problème, mais cela fait le tour.

Je voudrais remercier les deux contributeurs qui m'ont aidé à comprendre l'architecture MVVM car je n'avais pas vraiment compris cela auparavant.

Merci beaucoup pour la réponse rapide et désolé si ma question était facilement mal au manque! Parfois, je ne suis pas très bon pour transmettre mes idées ..


1 commentaires

Si vous souhaitez accéder à une variable de classe à l'extérieur du XAML, le meilleur moyen est de définir le contexte de données sur XAML, puis d'obtenir la variable souhaitée via la liaison de données.



0
votes

Si vous voulez voir un peu plus sur MVVM, vérifiez ceci (MVVM est vraiment puissant et un excellent moyen de développer un code testtable):

http://msdn.microsoft.com/en-us/magazine /dd419663.cox

Cela devrait vous donner une très bonne idée de MVVM. Il y a un exemple que vous pouvez télécharger uniquement sous la position où il est indiqué: Téléchargement de code disponible dans la galerie de code MSDN.


0 commentaires