2012-06-28 1 views
0

Je suis nouveau à WPF et liant des choses. J'essayais de trouver une solution à mon problème, mais manquant toujours quelque chose;/ Je voudrais obtenir des données de TextBox qui est dans UserControl et le mettre à une propriété dans laquelle est dans une fenêtre principale, sur le mode de fonctionnement, mais autre non;/WPF User Control Binding obtenir des données

J'ai une classe simple

public class User 
{ 
    public string Name {get; set;} 
    public string Age {get; set;} 
} 

et un contrôle utilisateur simple appelé UserDetails avec un deux textboxs

<TextBox Text="{Bind Name}" /> 
<TextBox Text="{Bind Age}" /> 

UserDetails UC est placé sur la fenêtre principale comme ceci:

<uc:UserDetails DataContext="{Binding User, Mode=TwoWay}" /> 

et MainWindow ViewModel J'ai une propriété

public User User { get; set;} 

sur MainWindow il y a aussi un bouton sur clic doit remplir la propriété de l'utilisateur avec les données de UserDetials UC. Il est assez tard maintenant et je dois l'avoir terminé le matin, donc toute solution directe serait appréciée.

Des idées comment le faire? L'exemple ci-dessus est très simple, mais si vous pouviez me montrer comment le faire, je pourrais gérer le reste de mon problème.

+0

Pouvez-vous montrer une capture d'écran? Si vous liez comme ceci, vous n'avez pas besoin de cliquer sur un bouton pour remplir l'utilisateur avec les détails de UserControl. Vous devez lier l'utilisateur directement à la commande usercontrol, lorsque vous modifiez le texte dans la zone de texte, la propriété sur l'utilisateur change immédiatement – Charleh

+0

Le bouton est nécessaire pour obtenir les données de la propriété User et les enregistrer dans la base de données. Mais toujours lorsque je remplis les deux TextBox et que je clique sur le bouton, la propriété User est Null. Il est difficile de poster des captures d'écran parce que mon application est beaucoup plus compliquée que l'exemple ci-dessus, mais le problème est le même. – suleks

+0

@suleks Il ne s'agit pas d'une fabrique de code libre où vous pouvez signaler un problème et attendre des bons utilisateurs de SO qu'ils répondent avec la solution de code complet car vous devez effectuer une affectation et en avoir besoin le matin. Nous offrirons de l'aide, souvent avec des exemples de code ou des liens utiles, mais ce type de demande ne convient pas aux utilisateurs de SO. – evanb

Répondre

1

Voici quelques choses à essayer:

  • Assurez-vous que vous configurez votre modèle de vue de DataContext du MainWindow. Même si vous n'utilisez pas de classe distincte pour votre modèle de vue et que vous utilisez simplement le code-behind, vous devez affecter le DataContext.
  • Il peut s'agir simplement d'une faute de frappe, mais dans vos zones de texte, vous avez écrit {Bind Name} alors que ce devrait être {Binding Path=Name, Mode=TwoWay} et le même pour l'âge. Vous devez définir le mode de liaison à double sens sur la propriété, pas sur la classe comme vous l'avez dans votre exemple.
0

Vous devez implémenter l'interface INotifyPropertyChanged et déclencher l'événement PropertyChanged dans le setter de propriétés. Vous devrez le faire pour vos classes MainViewModel et User. Voici un example de comment c'est fait.