2010-07-30 4 views
0

J'utilise MVVM light pour lier les événements sur UIElements dans mon View to ICommands dans mon modèle de vue, et cela fonctionne très bien.MVVM Light: Lier l'événement à la commande dans le code derrière

Cependant - J'ai une situation où je dois créer des contrôles à la volée, et je le fais dans le code derrière sur la vue car cela semble le meilleur endroit pour le faire, et c'est après tout l'interface utilisateur code. Comme je génère ces contrôles dans le code, j'ai également besoin de créer les liaisons d'événements dans le code et, malgré plusieurs tentatives, je n'ai pas obtenu le résultat souhaité.

Est-ce que quelqu'un a fait cela ou est-ce que quelqu'un sait comment?

Toute aide appréciée!

+2

Cela ne répond pas à votre question, mais êtes-vous sûr de devoir générer des contrôles lors de l'exécution? La même chose pourrait-elle être accomplie au moyen de modèles de données et, éventuellement, de déclencheurs ou de sélecteurs de modèles? –

Répondre

0

Je ne connais pas MVVM Light, mais en supposant que votre viewmodel soit défini comme DataContext de votre vue, il y a au moins les deux options suivantes.

  1. Si vous connaissez le type de viewmodel attaché à votre vue, vous pouvez accéder aux commandes du viewmodel directement et il n'y a pas besoin d'utiliser la liaison que vous pouvez définir directement le bien Command:

    var buttonA = new Button(); 
    buttonA.Content = "Click me"; 
    buttonA.Command = (DataContext as TheViewModel).TheCommand; 
    
  2. Si vous ne connaissez pas le type de votre viewmodel vous pouvez créer une liaison de la manière suivante:

    var buttonB = new Button(); 
    buttonB.Content = "Click me too"; 
    var binding = new Binding("TheCommand"); 
    binding.Source = DataContext; 
    buttonB.SetBinding(Button.CommandProperty, binding); 
    
+0

Je crois que la question est plus sur la façon d'ajouter la propriété jointe EventToCommand incluse dans MVVM Light Toolkit par le code au lieu de XAML. –

+0

Je pense que vous avez raison. Je suppose que ma réponse n'est pas très utile alors: - | –

0

merci pour vos réponses et commentaires. Matt a raison - la question est de savoir comment utiliser EventToCommand dans le code au lieu de XAMl. Matt - J'ai besoin de générer les contrôles à l'exécution car je ne sais jamais jusqu'à ce que les contrôles seront. Les contrôles sont sur un ruban, et le ruban est sensible au contexte, c'est-à-dire chaque fois que la vue principale est modifiée, les contrôles sur le ruban changent avec lui et doivent être générés.

J'ai trouvé une solution en utilisant les propriétés attachées, mais j'aimerais quand même savoir comment (et si) cela peut être fait avec MVVM Light.

+0

Salut Sean - Bienvenue sur StackOverflow. Vous devriez publier ce commentaire comme une modification à votre question - c'est une élaboration, plutôt qu'une réponse, et elle appartient à votre question originale. En ce qui concerne votre commentaire, cependant, il est toujours possible de générer vos changements sensibles au contexte sur le ruban grâce à Xaml pure et à l'utilisation intelligente des modèles de données. Je vous déconseille de le faire dans le code, car il limite votre flexibilité et rend le Xaml plus étroitement lié à son codebehind (ce qui est rarement nécessaire dans WPF). –

+0

Si vous éditez votre question originale pour demander des exemples de comment cela peut être fait, je suis sûr que quelqu'un va répondre (malheureusement, je n'ai pas le temps en ce moment, mais je reviendrai pour vérifier plus tard!). –

Questions connexes