Imagine que estas propiedades se escriben como UIElements (u otro objeto específico de WPF). ¿Cómo agregaría objetos a sus controles que no eran UIElements?
Debería proporcionar un contenedor derivado de un objeto WPF que expone la información que necesita. La mayoría de las veces, el contenedor simplemente llama al ToString() del objeto que se va a envolver. Dado que la mayoría de los tipos que utilizará proporcionan una implementación predeterminada lo suficientemente buena de ToString() tiene sentido llamar esto en lugar de hacer que el desarrollador escriba envolturas para todo.
En segundo lugar, imagine si se escribieron como alguna interfaz. ¿Qué pasa si quieres comunicar algo que esta interfaz no puede?Las únicas opciones son (a) el desarrollador vive con las limitaciones del marco o (b) Microsoft actualiza la interfaz y rompe todos los códigos existentes que ya se han escrito.
Considere también si está utilizando un patrón como MVVM. El diseño actual significa que sus modelos de visualización pueden exponer propiedades que no están vinculadas a WPF de ninguna manera, lo que hace que su código sea más reutilizable en diferentes tecnologías.
Finalmente, recuerde que hay una diferencia entre el objeto que representa la propiedad y la forma en que WPF representa esa información. P.EJ. si utiliza un tipo primitivo como System.String, WPF creará un bloque de texto y establecerá la propiedad del texto en el resultado de ToString(). Esto permite una separación muy clara entre los datos que se muestra en la interfaz de usuario y de qué manera la información es representa por la interfaz de usuario.
Tomar una clase simple que representa un elemento de menú, por ejemplo:
public class MenuItem
{
public string Text { get; set; }
public bool IsChecked { get; set; }
public bool IsEnabled { get; set; }
}
Este tipo sólo expone datos sobre el elemento de menú y no tiene información acerca de cómo esta información debe ser prestados. De hecho, aparte del nombre de la clase (MenuItem), esto ni siquiera es específico de un elemento de menú y los mismos datos podrían usarse en otro control de UI, como un cuadro de lista revisado sin cambios necesarios. Si la clase expuso elementos de interfaz de usuario específicos de WPF, entonces la información necesitaría ser adaptada por otro tipo para cada control de interfaz de usuario diferente.
Creo que es genial, pero ¿no tiene que ser el objeto una especie de elemento UI? Tanto TextBox como Image son FrameworkElements. Lo único que he visto que puedes asignar que no es un FrameworkElement es un String ... ¿es eso realmente lo único? Si es así, parece que no es una buena razón para que sea 'Objeto', ya que podría crear una Etiqueta o envoltorio alrededor de mi Cadena. – Trevor
@Rovert No, depende de la propiedad, si hay un aspecto visual y una forma de que WPF lo convierta en una Imagen, entonces se mostrará. Puede asignar * cualquier cosa * a un objeto. Creo que es un subproducto de [TypeConversion] (http://msdn.microsoft.com/en-us/library/aa970913.aspx) necesario para hacer que el marcado Xaml funcione. –
Punto interesante sobre TypeConversion. Eso realmente tiene mucho más sentido en cuanto a cómo y qué puede decidir mostrar. Por ejemplo, mirar a ImageSource para descubrir cómo funcionan conduce a una gran confusión, pero ahora sé que debe haber un comportamiento dinámico detrás de las escenas. ¡Gracias! – Trevor