2010-03-10 11 views
0

Ce que je veux exactement faire, c'est qu'il y a 2 tables, c'est-à-dire user et userprofile et que les deux ont des champs presque identiques. Je prendrai l'exemple du champ email. Il y a une zone de texte et la valeur du champ E-mail de la table Utilisateur y est affichée. Ce que je veux faire est, avoir un menu contextuel tel que lorsque l'utilisateur clique avec le bouton droit sur la zone de texte, le menu affiche à la fois les valeurs de champ de courrier électronique UserProfile et User. - developer 1 hour ago
Quelle que soit la valeur que l'on sélectionne dans le menu contextuel, la zone de texte affiche cette valeur. Vous pouvez utiliser Binding Email1 et Binding Email2, car je n'ai aucun problème à obtenir ces deux valeurs de la base de données, donc je vais changer mon code en conséquence. Comme je suis nouveau dans le framework WPF et .NET lui-même, je ne suis pas sûr de savoir comment y parvenir. S'il vous plaît laissez-moi savoir si je me suis fait clair cette fois. Je ne suis pas sûr de savoir comment gérer les commandes et les événements. Quelqu'un peut-il me montrer le code à .. accomalish ceMenu contextuel pour la zone de texte

<TextBox Style="{StaticResource FieldStyle}" Text="{Binding Email1, UpdateSourceTrigger=PropertyChanged}"> 
          <TextBox.BorderBrush> 
           <MultiBinding Converter="{StaticResource TextBoxBorderConverter}"> 
            <Binding Path="Email1"/> 
            <Binding Path="Email2"/> 
           </MultiBinding> 
          </TextBox.BorderBrush> 
         </TextBox> 

Merci à l'avance

+2

Ce n'est pas une question. – Jay

+0

Il semble que vous ayez de la difficulté à répondre aux questions ici, alors vous voudrez peut-être envisager de changer la façon dont vous leur posez la question. Essayez un format comme celui-ci: Commencez avec une prémisse et un peu d'arrière-plan; suivi avec un bloc de code que vous avez essayé; et enfin poser la question. –

+0

Certainement pas une "question" bien formulée, mais je pense qu'il a deux sources d'adresses e-mail, et il veut juste permettre à l'utilisateur de sélectionner le "bon" dans un menu contextuel. – Dave

Répondre

6

Au risque de vous donner un WPF/MVVM réponse noob et se flambé, va ici. Je ne peux pas vous conseiller sur la liaison de données avec les bases de données puisque je ne l'ai jamais fait, donc je vais juste vous donner le XAML et c'est à vous de travailler sur la fin de la base de données.

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <TextBox Height="28" Text={Binding PreferredEmail}"> 
     <TextBox.ContextMenu> 
      <ContextMenu> 
      <MenuItem Header="{Binding Email1}" Command="{Binding Email1Command}" /> 
      <MenuItem Header="{Binding Email2}" Command="{Binding Email2Command}" /> 
      </ContextMenu> 
     </TextBox.ContextMenu> 
     </TextBox> 
    </Grid> 
</Page> 

Dans le cas des objets à databinding, PreferredEmail, Email1 et Email2 se lierait à une propriété de dépendance ou une propriété qui déclenche l'événement PropertyChanged. C'est ainsi que votre ViewModel (ou ce que vous voulez appeler le code de niveau inférieur) mettra à jour les données. Si vous modifiez ces valeurs dans le code-behind, cela finira par se refléter dans le menu contextuel automagiquement. Ensuite, vous devez implémenter deux classes ICommand pour gérer le paramètre PreferredEmail.

Je pense qu'il est super boiteux d'implémenter deux gestionnaires de commandes, et il ne sera certainement pas bien à l'échelle si vous devez ajouter plus de sources de courrier électronique. Je pense qu'une meilleure solution serait d'utiliser un gestionnaire de commande et un CommandParameter qui est l'en-tête MenuItem sélectionné, mais je ne sais pas comment faire cela. Mais dans tous les cas, la solution de deux gestionnaire de commandes fonctionnera toujours si vous êtes dans une liaison.

+0

Je suis vraiment désolé les gars pour ne pas encadrer la question correctement. Je suis nouveau à WPF, donc je pourrais être en mission sur les détails techniques nécessaires. Ce que je veux exactement faire, c'est qu'il y a 2 tables, c'est-à-dire user et userprofile et les deux ont des champs presque identiques. Je prendrai l'exemple du champ email. Il y a une zone de texte et la valeur du champ E-mail de la table Utilisateur y est affichée. Ce que je veux faire est, avoir un menu contextuel tel que lorsque l'utilisateur clique avec le bouton droit sur la zone de texte, le menu affiche à la fois les valeurs de champ de courrier électronique UserProfile et User. – developer

+0

..Continued .. Quelle que soit la valeur que l'on sélectionne dans le menu contextuel, la zone de texte affiche cette valeur. Vous pouvez utiliser Binding Email1 et Binding Email2, car je n'ai aucun problème à obtenir ces deux valeurs de la base de données, donc je vais changer mon code en conséquence. Comme je suis nouveau dans le framework WPF et .NET, je ne suis pas sûr de savoir comment y parvenir. S'il vous plaît laissez-moi savoir si je me suis fait clair cette fois. – developer

+0

Dave à partir du code ci-dessus que vous avez posté, l'en-tête donnera la valeur mail1 pour le menu contextuel, mais que fera Command = "{Binding Email1Command}" faire. Je n'ai aucune idée comment coder cela d'une manière qui aura la valeur email1 ou email2 affichée dans la zone de texte quand l'utilisateur la sélectionne. – developer