Arquitectura de edición de propiedades
Editar visualmente las propiedades de objetos es una característica importante de WPF Designer for Visual Studio. En este tema se describe la arquitectura del sistema de edición de propiedades de WPF Designer.
Entrada de la propiedad
La clase PropertyEntry representa la propiedad propiamente dicha. La clase PropertyValue representa el valor subyacente de una propiedad.
Editores de categorías
Un editor de categorías permite al usuario final modificar al mismo tiempo varias propiedades dentro de una categoría. Las propiedades que están asociadas a un editor de categorías no se muestran en ningún otro lugar de la ventana Propiedades. Las propiedades que no modifique ese editor de categorías estarán visibles y se podrán modificar. Puede especificar qué propiedades dentro de una categoría pueden ser modificadas por un editor de categoría.
Editor de valores de propiedad
Un editor de valores de propiedad define el modo en que se muestra y se modifica un tipo determinado en la ventana Propiedades de un diseñador visual. Los editores de valores de propiedad desempeñan una función en la clase WPF Designer, similar a la de la clase UITypeEditor en la arquitectura System.ComponentModel. Los editores de WPF Designer, sin embargo, son independientes de System.ComponentModel y de la arquitectura de Windows Forms.
PropertyValueEditor tiene las partes enumeradas en la tabla siguiente.
Parte del editor de valores de propiedad |
Descripción |
---|---|
Editor insertado (también denominado la vista) |
Editor que se hospeda en el mismo espacio físico que la vista de la ventana Propiedades de hospedaje. Por ejemplo, el editor de la propiedad Margin. |
Editor extendido |
Editor que normalmente no se hospeda en contexto. Es el equivalente al editor de estilo desplegable de la arquitectura System.ComponentModel. Por ejemplo, el editor de la propiedad HorizontalAlignment. |
Cuadro de diálogo |
Un editor que se implementa en su propio cuadro de diálogo. Por ejemplo, el editor de la propiedad RowDefinitions. |
Puede utilizar los valores predeterminados para la vista y las partes del editor insertado. PropertyValueEditor no es necesario para proporcionar una parte del editor extendido.
Cada parte es un objeto DataTemplate de WPF. Cada parte es independiente de las otras y se puede usar de forma independiente.
La ventana Propiedades del hospedaje proporciona el marco que hay alrededor de la vista y de los editores. Esto permite que el host proporcione un estilo coherente en los editores y permite que diferentes hosts proporcionen estilos diferentes. Por ejemplo, Expression Blend y Visual Studio proporcionan un aspecto y comportamiento diferentes para sus respectivas ventanas Propiedades.
El enlace de datos de WPF y un conjunto estándar de objetos RoutedCommand de WPF proporcionan el mecanismo de comunicación entre el host y las partes PropertyValueEditor.
En el caso más sencillo, una parte de editor de valores puede ser un objeto DataTemplate que contiene los controles de WPF estándar. En más casos complejos, una parte de tipo puede ser un objeto DataTemplate que hace referencia al control personalizado.
Puede implementar tres tipos diferentes de editores de valores de propiedad, los cuales se muestran en la tabla siguiente.
Tipo de editor de valores de propiedad |
Descripción |
---|---|
Sencillo |
El editor de valores de propiedad se compone de un editor insertado. |
Extendido |
El editor de valores de propiedad se compone de un editor insertado y de un editor extendido. |
Cuadro de diálogo |
El editor de valores de propiedad se compone de un editor insertado y de un cuadro de diálogo. |
Clases de infraestructura
Las clases de infraestructura son necesarias para las implementaciones de editores de valores de propiedad. Estas clases se enumeran en la tabla siguiente y se componen de la infraestructura básica para hospedar o crear editores de valores.
Clase de infraestructura |
Descripción |
---|---|
Representa el valor de una propiedad. |
|
Clase base de los editores de valores. |
|
Tipos RoutedCommand e implementaciones predeterminadas de los controladores para esos comandos. |
|
Clase base abstracta para los editores de valores de cuadros de diálogo.
|
Implementación del editor de valores de propiedad
En las secciones siguientes se describen aspectos de implementar un editor de valores de propiedad.
Value, StringValue y Collection
El modelo PropertyValue tiene tres propiedades que están relacionadas con el valor de la propiedad. Las propiedades PropertyValue se enumeran en la tabla siguiente.
Propiedad PropertyValue |
Descripción |
---|---|
Representación de objeto de los datos. |
|
Representación de cadena de los datos, que se puede utilizar para presentación o serialización. |
|
Representación de colección de los datos. |
StringValue es una representación de cadena de los datos que se puede utilizar para presentación o serialización. Value y StringValue almacenan en memoria caché cualquier llamada establecida.
La memoria caché de StringValue se vacía cuando se establece Value. Un escenario común es admitir la actualización dinámica de la propiedad que se está diseñando (como los tipos de usuario), donde StringValue se enlaza a datos en la entrada de texto. No obstante, la propiedad subyacente sólo se establece cuando el texto dinámico cumple ciertos criterios.
Requisitos de PropertyValueEditor
Un editor de valores de propiedad correctamente implementado debe satisfacer los siguientes requisitos.
El editor de valores de propiedad debe estar diseñado para que se puedan utilizar las partes del editor insertado y del editor extendidas independientemente.
Un editor de valores de propiedad no debe almacenar el estado. Los editores de valores de propiedad no tienen estado, se pueden almacenar en memoria caché en una implementación del host y se pueden reutilizar en varios valores de propiedad.
Un editor de valores de propiedad no debe suponer que sólo hay activo un control de una parte del editor de valores (de la vista, insertada o extendida) en un momento determinado. Por ejemplo, un cuadro de diálogo podría tener activa la parte de la vista, la parte insertada y la parte extendida de la interfaz de usuario simultáneamente.
Un control implementado como parte de un editor de valores de propiedad no debe almacenar el estado. Un control implementado como parte de un editor de valores no debe suponer que sólo se enlazará a un valor de propiedad. Los controles se pueden reciclar para cambiar diferentes valores de propiedad. Si el modelo de datos se actualiza, se debe vaciar cualquier información que esté almacenada en memoria caché.
Un control implementado como parte de un editor de valores de propiedad no debe tener ninguna idea preconcebida acerca del host o de sus controles primarios. Los únicos mecanismos de comunicación que se deben utilizar son el modelo de datos PropertyValue, por vía de DataContext y el conjunto estándar de comandos.