2011-09-01 4 views
1

Après avoir passé une journée à essayer de trouver la réponse à ma question, je vais enfin poser la question. :)Débutant WPF Reliure Question

En parcourant les pages de manuel de MSDN, je trouve que je peux enfin supprimer les procédures de remplissage de formulaire qui se multiplient et connecter chaque champ (TextBox, CheckBox, etc.) à la propriété que j'ai choisie.

J'ai une classe appelée ArticleItem qui gère toutes les données dans ce cas.

Code VB:

Public ArtItem as New ArticleItem 

    Private Sub LookUpArt() 
    If txtArtNo.Text.Length > 0 then 
     ArtItem.Load(txtArtNo.Text) 
    End If 
    End Sub 

XAML:

<Page DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

<!-- ... --> 

<TextBox x:Name="txtDescr" Text="{Binding ArtItem, Path=Descr}" /> 

Maintenant, je n'ai aucun problème peuplant les listboxes, mais je ne reçois aucune réaction dans mon champ de saisie.
Qu'est-ce qui me manque?

Répondre

5

ArtItem est un champ, vous ne pouvez pas lier aux champs, uniquement aux propriétés publiques. De plus, vous devez implementINotifyPropertyChanged s'il change après l'initialisation sinon la liaison ne sera pas mise à jour.

Edit: Votre liaison est cassé ainsi, vous définissez le chemin deux fois, il devrait être {Binding ArtItem.Descr} ou {Binding Path=ArtItem.Descr} qui est le même, Descr doit également être une propriété publique et ArtItem aussi besoin de mettre en œuvre l'interface .

+0

@Jonas: J'ai trouvé un autre problème. –

+0

Ok, je lui ai donné un autre coup de feu. Ma classe implémente maintenant l'interface INotifyPropertyChanged, l'ArtiItem est devenu une instance privée ('Private _ArtItem as New ArticleItem') et a créé une propriété publique nommée' ArtItem' qui retourne la valeur. La propriété Descr déclenche également l'événement 'PropertyChanged' lors de la modification. Le XAML est également mis à jour à 'Text =" {Binding ArtItem.Descr} "' Mais la zone de texte reste vide ... – Jonas

+0

Donc les deux classes implémentent l'interface et les deux propriétés auxquelles vous vous liez via le chemin 'ArtItem.Descr' sont publiques et augmenter l'événement respectif dans le setter? Si tel est le cas, cela devrait fonctionner, étant donné que 'ArtItem' est une propriété de votre page qui a été définie sur DataContext et que le DataContext est hérité du TextBox. Il peut y avoir d'autres exigences auxquelles je ne peux penser en ce moment. Essayez de [déboguer la liaison] (http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/debugging-data-bindings-in-a-wpf-or-silverlight-application.aspx) et publiez le code complet si vous échouez. –