Frage

Ich begann ein Hobby-Projekt über WPF zu lernen und in meinem reasearch ich auf diese stumpled WPF Property http: // www.codeplex.com/wpg

Ich habe die Quelle von http://wpg.codeplex.com/SourceControl/ListDownloadableCommits. aspx Und fing an, durch sie gerade, sieht cool aus und funktioniert. Aber für das Leben von mir, ich kann nicht herausfinden, wie es funktioniert. Die folgenden Fragen ist das, was ich mit links auf den ersten Blick.

  • Woher weiß er, welche Eigenschaften ein Objekt?
  • Wie funktioniert es die Kontrolle macht einen Wert zu bearbeiten?
  • Wie geht das entscheiden, was zu machen kontrollieren? (Ich vermute, Metadaten Beschreibungen der Eigenschaften)

Ich verstehe die DependancyProperties Griffe der Datenaustausch zwischen den neuen Werten.

  • Wenn die XAML oder Codebehind-Code ist, dass die Magie tut alles?

Es gibt viele XAML-Code in der Datei Default.xaml, aber soweit ich es sagen kann, ist nur Stile und die Blicke, die dort definiert sind.

War es hilfreich?

Lösung

  
      
  • Woher weiß er, welche Eigenschaften ein Objekt?
  •   

Es verwendet System.ComponentModel.TypeDescriptor die Eigenschaften zu bestimmen dass ein Typ hat über TypeDescriptor.GetProperties . Ein PropertyDescriptor bietet eine Fülle von Informationen über die einzelnen Immobilien (zB PropertyDescriptor.IsReadOnly wird Ihnen sagen, dass eine Eigenschaft ist nur lesbar). Ferner wurde unter Verwendung PropertyDescriptor.GetValue und PropertyDescriptor.SetValue können die Werte von Eigenschaften erhalten und geschrieben werden zu.

  
      
  • Wie funktioniert es die Kontrolle macht einen Wert zu bearbeiten?
  •   
  • Wie geht das entscheiden, was zu machen kontrollieren? (Ich vermute, Metadaten Beschreibungen der Eigenschaften)
  •   

Es verwendet eine benutzerdefinierte Steuerung eine PropertyGrid genannt, die ein ObservableCollection von Items. Item ist lediglich eine Basisklasse für das Kernmodellobjekt, das Property ist. Property setzt den zugrunde liegenden Typ (PropertyDescritor.PropertyType) der Eigenschaft und macht die PropertyDescriptor.GetValue und PropertyDescriptor.SetValue Methoden via Property.Value. Dies wiederum ist, was gebunden ist, um die Bearbeitung zu ermöglichen. DataTemplates sind hier der Schlüssel. Einige CLR-Typen verfügen über benutzerdefinierte DataTemplates, die Steuerelemente, die Sie sehen machen. Zum Beispiel wird der Typ als Boolean CheckBox gerendert, während ein Enum als ComboBox gerendert wird. Der Standard DataTemplate ist ein TextBox.

  
      
  • Wenn die XAML oder Codebehind-Code ist, dass die Magie tut alles?
  •   

Die Neigung ist in Themes\Default.xaml.

Der Code kann wie folgt zusammengefasst werden. Es gibt Daten (Data\Property), die Informationen über Eigenschaften eines Objekts kapselt und bietet eine Eigenschaft (Property.Value) zu lesen und den Wert einer Immobilie zu schreiben. Diese Daten können als ObservableCollection in einem benutzerdefinierten Steuerelement ausgesetzt (PropertyGrid), die unter Verwendung von DataTemplates in Themes\Default.xaml gemacht ist.

  

Es gibt viele XAML-Code in der Datei Default.xaml, aber soweit ich es sagen kann, ist nur Stile und die Blicke, die dort definiert sind.

Sie die DataTemplates nicht übersehen werden.

Andere Tipps

  
      
  • Woher weiß er, welche Eigenschaften ein Objekt?
  •   

Wenn es die gleiche Weise wie die Windows Forms-Eigenschaft Grid funktioniert, es funktioniert wie folgt vor:

  • , wenn das Objekt implementiert ICustomTypeDescriptor, erhalten die Eigenschaften von dieser Schnittstelle (mit der GetProperties Methode)
  • andernfalls Verwendung Reflexion über den Objekttyp (obj.GetType (). GetProperties ()

Für die anderen Fragen ... na ja, ich habe nicht auf dem Code angesehen, so kann ich nicht beantworten;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top