Question

J'ai commencé un projet de loisir pour en savoir plus sur WPF et, dans ma recherche, je suis tombé sur ce PropertyGrid WPF http: // www.codeplex.com/wpg

J'ai téléchargé le code source à partir de http://wpg.codeplex.com/SourceControl/ListDownloadableCommits. aspx , Et a commencé à parcourir, l'air cool, et fonctionne. Mais pour ma vie, je ne peux pas comprendre comment ça marche. Les questions suivantes sont ce qui me reste au premier abord.

  • Comment sait-il quelles propriétés un objet a?
  • Comment le rendu du contrôle permet-il de modifier une valeur?
  • Comment décide-t-il quel contrôle rendre? (je devine les descriptions de métadonnées sur les propriétés)

Je comprends que DependancyProperties gère l'échange de données entre les nouvelles valeurs.

  • Où est le code XAML ou CodeBehind qui fait toute la magie?

Il y a beaucoup de code XAML dans le fichier Default.xaml, mais pour autant que je sache, il ne s'agit que des styles et des apparences qui y sont définis.

Était-ce utile?

La solution

  
      
  • Comment sait-il quelles propriétés un objet a?
  •   

Il utilise System.ComponentModel.TypeDescriptor pour déterminer les propriétés d'un type via TypeDescriptor.GetProperties . PropertyDescriptor fournit une mine d'informations sur chaque propriété (par exemple, PropertyDescriptor.IsReadOnly vous indiquera qu'une propriété est en lecture seule. De plus, utilisez PropertyDescriptor.GetValue et PropertyDescriptor.SetValue , les valeurs des propriétés peuvent être obtenues et écrites dans.

  
      
  • Comment le rendu du contrôle permet-il de modifier une valeur?
  •   
  • Comment décide-t-il quel contrôle rendre? (je devine les descriptions de métadonnées sur les propriétés)
  •   

Il utilise un contrôle personnalisé appelé PropertyGrid qui expose un ObservableCollection sur Élément s. Item est simplement une classe de base pour l'objet de modèle principal qui est Propriété . Property expose le type sous-jacent ( PropertyDescritor.PropertyType ) de la propriété et expose le PropertyDescriptor.GetValue et PropertyDescriptor.SetValue méthodes via Property.Value . C’est à son tour ce qui doit permettre l’édition. Les DataTemplate sont la clé ici. Quelques types CLR ont des DataTemplate personnalisés qui rendent les contrôles que vous voyez. Par exemple, le type Boolean est restitué sous la forme d'un CheckBox , tandis qu'un Enum est restitué sous la forme d'un ComboBox . Le DataTemplate par défaut est une TextBox .

  
      
  • Où est le code XAML ou CodeBehind qui fait toute la magie?
  •   

Sa propension est dans Themes \ Default.xaml .

Le code peut être résumé comme suit. Des données ( Data \ Property ) encapsulent les informations sur les propriétés d'un objet et fournissent une propriété ( Property.Value ) pour lire et écrire la valeur d'une propriété. Ces données sont exposées sous forme de ObservableCollection dans un contrôle personnalisé ( PropertyGrid ) qui est restitué à l'aide de DataTemplate dans Themes \ Default.xaml. .

  

Il y a beaucoup de code XAML dans le fichier Default.xaml, mais pour autant que je sache, il ne s'agit que des styles et des apparences qui y sont définis.

Ne négligez pas les DataTemplate .

Autres conseils

  
      
  • Comment sait-il quelles propriétés un objet a?
  •   

Si cela fonctionne de la même manière que la grille de propriétés Windows Forms, vous obtiendrez ce qui suit:

  • si l'objet implémente ICustomTypeDescriptor, obtenez les propriétés de cette interface (avec la méthode GetProperties)
  • sinon, utilisez la réflexion sur le type de l'objet (obj.GetType (). GetProperties ()

Pour les autres questions ... eh bien, je n'ai pas regardé le code, donc je ne peux pas répondre;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top