WPF „Magic“ in einer Property Kontrolle
-
10-07-2019 - |
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.
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 Item
s. 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. DataTemplate
s sind hier der Schlüssel. Einige CLR-Typen verfügen über benutzerdefinierte DataTemplate
s, 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 DataTemplate
s 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 DataTemplate
s 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;)