2008-11-27 16 views
10

Esta pregunta tiene la intención de proporcionar una lista de soluciones a problemas comunes, "errores" o problemas de diseño al desarrollar aplicaciones WPF. Esto también puede incluir patrones de diseño adecuados, siempre que haya una explicación de por qué funciona mejor. Las respuestas deben votarse a favor o en contra según lo común que sea el tipo de problema. Aquí están las reglas:¿Cuáles son los errores más comunes cometidos en el desarrollo de WPF?

  • Una respuesta por publicación. Esto claramente dará a los problemas más comunes la clasificación más alta.
  • Lo mejor sería proporcionar el enlace a una publicación o una solución relacionada que ya vive en algún lugar de SO land.
+0

Esto puede ser un recurso invaluable para muchos desarrolladores a medida que más y más tiendas comienzan a buscar en WPF. –

Respuesta

14

Problema: El principal problema que he visto hasta ahora es que la gente comienza a codificar en WPF con el modelo WinForm interfaz de usuario en mente.

Solución: WPF no es WinForms/MFC/Win32 así que olvidar todos los supuestos secundarios de interfaz de usuario y normas que ha usado y aprendido durante el desarrollo de Windows interfaz de usuario basada en últimos 20 años.

Es muy importante comprender las ideas centrales detrás de esta plataforma. Este enlace-Major UI Development Breakthroughs in the new WPF platform dará una visión detallada de WPF. Que enumera los siguientes puntos. Los resaltados son mis características favoritas de esta plataforma.

  1. Gráficos Avanzados
  2. Dibujo Object Model
  3. Aplicación texto enriquecido
  4. Adaptable interfaz de usuario de diseño
  5. Contenido del modelo flexible
  6. Lookless Controles
  7. Estilos consistentes basados ​​en datos de interfaz de usuario
  8. disparadores
  9. programación declarativa
+0

Realmente deberías ser más específico. Voy a votar hasta que me proporciones una explicación más detallada de lo que quieres decir. Deberías proporcionar referencias a algunas cosas de M-V-VM. – Micah

+0

Tiene toda la razón, y es lo único que tienes que entender para entender WPF –

+0

Secundo Micah, ¿Qué suposiciones debería descartar? – Jimmy

1

Conseguir vinculantes para que funcione correctamente entre las propiedades definidas en ContentControls (Windows, controles de usuario, etc ..) y las propiedades de los elementos de datos que componen el contenido de los controles. Por ejemplo. Digamos que tiene una ventana que se parece a esto:

<Window x:Name="MyWindow"....> 
    <TextBlock Text="{Binding Path=PropertyDefinedInMyWindow}" /> 
</Window> 

Problema: No importa con qué frecuencia se actualiza el "PropertyDefinedInMyWindow" que nunca se refleja en el TextBlock. SO Question

Solución: Debe configurar el DataContext de la ventana o indicarle a la vinculación en qué elemento se encuentra la propiedad.SO Solution

2

Problema/Pregunta:SO Question

¿Cómo exponer un DependencyProperty de un componente en mi control de usuario a los usuarios? Hay muchos de ejemplos de cómo exponer una propiedad normal creando una nueva dependencia propiedad y enlace, pero ninguna sobre cómo para exponer una propiedad de solo lectura como FrameworkElement.ActualWidthProperty.

Solución: Es necesario exponer una nueva DependencyProperty Sólo lectura en el control de usuario, y actualizarlo siempre que su contenido "componente" 's ActualWidthProperty se actualiza. Esto requiere el uso de DependecyPropertyDescriptor para recibir notificaciones de los cambios que se produzcan. SO Solution

3

Problema: Utilizando el patrón de diseño M-V-VM, ¿dónde instanciar las vistas? ¿Esto sucede en ViewModel? SO Question 1, SO Question 2

Solución: desarrollo WPF es más eficaz cuando se utiliza el modelo M-V-VM en contraposición a otros patrones comunes, tales como M-V-C. La tendencia es tratar el ViewModel de la misma manera que lo haría con el controlador que manejaría abrir y crear vistas, así como los modelos. Este no es el caso en M-V-VM. Las vistas son el único lugar donde se deben crear las vistas. Los ViewModels no deberían saber nada de la vista. SO Answer 1, SO Answer 2

+0

Esto crea una pregunta de seguimiento: ¿cómo se crean las vistas? Yo uso RelayCommands para vincular acciones desde la vista al ViewModel, por lo que la vista ni siquiera sabe que una acción se ha disparado, no sabe que debe abrir una nueva vista. Solución: ¿crear un evento en la máquina virtual para que la vista se suscriba? – Sam

+0

@Sam - Voy a escribir un artículo sobre esto. ¿Me puede dar algunos ejemplos donde los comandos deberían vivir en la máquina virtual frente a la vista misma? – Micah

3

Sin darse cuenta de lo mal que la renderización de fuentes se encuentra al principio de un proyecto y de ser informado por el cliente que no pueden soportar mirarlo por lo borroso que se ve todo

+3

no sé por qué las personas votan esto. Este ha sido un gran problema para mucha gente. Parece que solo después de que Microsoft intentó usar WPF para VS 2010 se dieron cuenta de la importancia de un problema. –

0

Usando código - detrás en las vistas, lo que hace llorar al bebé FSM.

Cuestiones relacionadas