Pergunta

Eu comecei um projeto de hobby para aprender sobre WPF e na minha reasearch i stumpled sobre esta WPF PropertyGrid http: // www.codeplex.com/wpg

Eu baixei a fonte de http://wpg.codeplex.com/SourceControl/ListDownloadableCommits. aspx E comecei a navegar por ele, parece legal, e obras. Mas para a vida de mim, eu não consigo descobrir como ele funciona. As perguntas a seguir é o que eu estou à esquerda com à primeira vista.

  • Como se sabe quais propriedades um objeto tem?
  • Como se tornar o controle para editar um valor?
  • Como se decidir o controle para processar? (I estou supondo descrições de metadados sobre as propriedades)

Eu entendo as DependancyProperties alças do DataExchange entre os novos valores.

  • Onde está o código XAML ou CodeBehind que faz toda a magia?

Há um monte de código XAML no arquivo Default.xaml, mas tanto quanto eu posso dizer é apenas estilos e os olhares que são definidas lá.

Foi útil?

Solução

  • Como se sabe quais propriedades um objeto tem?

Ele usa System.ComponentModel.TypeDescriptor para determinar as propriedades que um tipo tem via TypeDescriptor.GetProperties . A PropertyDescriptor oferece uma riqueza de informações sobre cada propriedade (por exemplo, PropertyDescriptor.IsReadOnly irá dizer-lhe que uma propriedade é somente leitura). Além disso, utilizando PropertyDescriptor.GetValue e PropertyDescriptor.SetValue , os valores das propriedades podem ser obtidas e escrita para.

  • Como se tornar o controle para editar um valor?
  • Como se decidir o controle para processar? (I estou supondo descrições de metadados sobre as propriedades)

Ele usa um controle personalizado chamado de PropertyGrid que expõe um ObservableCollection de Items. Item é meramente uma classe base para o modelo de objeto do núcleo que é Property. Property expõe o tipo subjacente (PropertyDescritor.PropertyType) da propriedade e expõe os métodos PropertyDescriptor.GetValue e PropertyDescriptor.SetValue através Property.Value. Este, por sua vez, é o que é obrigado a para permitir a edição. DataTemplates são a chave aqui. Alguns tipos CLR tem DataTemplates personalizados que tornam os controles que você vê. Por exemplo, o tipo Boolean é processado como uma CheckBox enquanto um Enum é processado como uma ComboBox. O DataTemplate padrão é um TextBox.

  • Onde está o código XAML ou CodeBehind que faz toda a magia?

A propensão do que é na Themes\Default.xaml.

O código pode ser resumido como assim. Há dados (Data\Property) que encapsula as informações sobre propriedades de um objeto e fornece uma propriedade (Property.Value) a ler e escrever o valor de uma propriedade. Esta informação é exposta como um ObservableCollection em um controle personalizado (PropertyGrid) que é processado usando DataTemplates em Themes\Default.xaml.

Há um monte de código XAML no arquivo Default.xaml, mas tanto quanto eu posso dizer é apenas estilos e os olhares que são definidas lá.

Não subestime a DataTemplates.

Outras dicas

  • Como se sabe quais propriedades um objeto tem?

Se ele funciona da mesma maneira como a grade formas de propriedade do Windows, ele faz o seguinte:

  • se o ICustomTypeDescriptor objeto implementa, obter as propriedades de esta interface (com o método GetProperties)
  • Caso contrário, o uso de reflexão sobre o tipo do objeto (obj.GetType (). GetProperties ()

Para as outras questões ... bem, eu não olhei o código, então eu não posso responder;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top