Compartir a través de


Arquitectura de edición de propiedades

Actualización: noviembre 2007

Editar visualmente las propiedades de objetos es una característica importante de Windows Presentation Foundation (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 formularios 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 cuatro tipos diferentes de editores de valores de propiedad, que se enumeran 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

PropertyValue

Representa el valor de una propiedad.

PropertyValueEditor

Clase base de los editores de valores.

PropertyValueEditorCommands

Tipos RoutedCommand e implementaciones predeterminadas de los controladores para esos comandos.

DialogPropertyValueEditor

Clase base abstracta para los editores de valores de cuadros de diálogo.

  • Define el comando ShowDialog y un controlador predeterminado para ese comando.

  • Tiene una vista predeterminada y una plantilla de editor insertado.

  • Marca PropertyValueEditor como un editor 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

Value

Representación de objeto de los datos.

StringValue

Representación de cadena de los datos, que se puede utilizar para presentación o serialización.

Collection

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 caché de StringValue se vacía cuando se establece Value. La caché de Value se vacía cuando se establece ImmediateValue. Esto significa que cuando se establece ImmediateValue, se vacía tanto la caché de Value como StringValue.

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.

Vea también

Referencia

PropertyEntry

PropertyValue

PropertyValueEditor

Otros recursos

Extensibilidad de WPF Designer