Domanda

Ho iniziato un progetto hobby per conoscere WPF e nella mia ricerca mi sono imbattuto in questa PropertyGrid WPF http: // www.codeplex.com/wpg

Ho scaricato la fonte da http://wpg.codeplex.com/SourceControl/ListDownloadableCommits. aspx E ha iniziato a sfogliarlo, sembra bello e funziona. Ma per la mia vita, non riesco a capire COME funzioni. Le seguenti domande sono: cosa mi rimane a prima vista.

  • Come fa a sapere quali proprietà ha un oggetto?
  • Come viene eseguito il rendering del controllo per modificare un valore?
  • Come decide quale controllo rendere? (sto indovinando le descrizioni dei metadati sulle proprietà)

Comprendo che DependancyProperties gestisce lo scambio di dati tra nuovi valori.

  • Dov'è il codice XAML o CodeBehind che fa tutta la magia?

C'è un sacco di codice XAML nel file Default.xaml, ma per quanto ne so sono solo gli stili e l'aspetto che sono definiti lì.

È stato utile?

Soluzione

  
      
  • Come fa a sapere quali proprietà ha un oggetto?
  •   

Utilizza System.ComponentModel.TypeDescriptor per determinare le proprietà di un tipo tramite TypeDescriptor.GetProperties . Un PropertyDescriptor fornisce moltissime informazioni su ciascuna proprietà (ad es. PropertyDescriptor.IsReadOnly ti dirà che una proprietà è di sola lettura). Inoltre, utilizzando PropertyDescriptor.GetValue e PropertyDescriptor.SetValue , è possibile ottenere e scrivere i valori delle proprietà.

  
      
  • Come viene eseguito il rendering del controllo per modificare un valore?
  •   
  • Come decide quale controllo rendere? (sto indovinando le descrizioni dei metadati sulle proprietà)
  •   

Utilizza un controllo personalizzato chiamato PropertyGrid che espone un ObservableCollection di Item s. Item è semplicemente una classe base per l'oggetto modello principale che è Proprietà . Property espone il tipo sottostante ( PropertyDescritor.PropertyType ) della proprietà ed espone PropertyDescriptor.GetValue e PropertyDescriptor.SetValue metodi tramite Property.Value . Questo, a sua volta, è ciò che è destinato a consentire la modifica. DataTemplate s sono la chiave qui. Alcuni tipi di CLR hanno DataTemplate personalizzati che rendono i controlli che vedi. Ad esempio, il tipo Booleano viene visualizzato come CheckBox mentre un Enum viene visualizzato come ComboBox . Il DataTemplate predefinito è un TextBox .

  
      
  • Dov'è il codice XAML o CodeBehind che fa tutta la magia?
  •   

La propensione è in Temi \ Default.xaml .

Il codice può essere riassunto in questo modo. Esistono dati ( Data \ Property ) che incapsulano le informazioni sulle proprietà di un oggetto e forniscono una proprietà ( Property.Value ) per leggere e scrivere il valore di una proprietà. Questi dati sono esposti come ObservableCollection in un controllo personalizzato ( PropertyGrid ) che viene reso utilizzando DataTemplate in Themes \ Default.xaml .

  

C'è un sacco di codice XAML nel file Default.xaml, ma per quanto ne so sono solo gli stili e l'aspetto che sono definiti lì.

Non trascurare DataTemplate s.

Altri suggerimenti

  
      
  • Come fa a sapere quali proprietà ha un oggetto?
  •   

Se funziona allo stesso modo della griglia delle proprietà di Windows Form, effettua le seguenti operazioni:

  • se l'oggetto implementa ICustomTypeDescriptor, ottenere le proprietà da questa interfaccia (con il metodo GetProperties)
  • altrimenti, usa la riflessione sul tipo di oggetto (obj.GetType (). GetProperties ()

Per le altre domande ... beh, non ho guardato il codice, quindi non posso rispondere;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top