2009-04-27 16 views
10

¿Qué es WPF para el programador WinForms?¿Qué es WPF para el programador WinForms?

WinForms destilada agrega controles a formularios y agrega controladores de eventos. Esto es simple y fácil y le permite hacer GUIs funcionales rápidamente.

WPF por otro lado es XAML (?) + Código (?) Que parece una forma mucho más complicada de hacer interfaces de usuario más bonitas lentamente.

Existen muchas preguntas de SO sobre aspectos de WPF, pero estoy buscando un blub de dos frases sobre cómo grawk. ¿Debería centrarme en aprender XAML? ¿O se escribe WPF real accediendo directamente a las clases y escribiendo código (como Winforms)?

Además, ¿qué beneficio práctico vería un programador de WinForms como yo al usar WPF? Los gráficos 3D, el acercamiento arbitrario de texto y las "máscaras" personalizadas para las aplicaciones no son respuestas válidas. ¿Qué ofrece WPF una aplicación utilizada para seguir las órdenes de envío.

+3

Grawk = grok + awk - gran nueva palabra – MrTelly

Respuesta

1

supongo que una forma de verlo sería considerar HTML + CSS páginas web. Teníamos HTML y eso fue genial, excepto que las cosas estaban mezcladas. Lo que las personas se dieron cuenta es que con CSS, podría separar la estructura del documento de su presentación . XAML hace lo mismo, o al menos lo permite y lo alienta.

En cuanto a los beneficios prácticos, revise los ejemplos de MSDN. Tiendo a pensar que WPF está más orientado hacia los llamados "medios ricos", con elementos mucho más complejos. Su ejemplo de una aplicación que rastrea las órdenes de envío no es bueno, particularmente porque muchos de esos sistemas aún se ejecutan en interfaces basadas en DOS.

0

La parte XAML de una aplicación WPF es vagamente un reemplazo del archivo WinForm.Designer.cs en WinForms.

El modelo WPF tiene un mejor diseño para la IU y los controles individuales, solucionando muchas de las deficiencias de WinForms y lo guía (con suerte) a un mejor diseño de Seperation of Concern.

0

WPF debería ser el sueño de todos los programadores de WinForms: en vez de hacer todo, le permite decir cuáles son los controles, dónde colocarlos, cómo se ven y, en cierta medida, cómo se comportan en XAML, a la vez que le permite personalizar el comportamiento en el "código subyacente". Ah, y el diseñador puede hacer mucho más por ti ahora que antes debido a la naturaleza declarativa de XAML.

+2

"Debería" ser el sueño de todos los programadores de WinForms, pero me encanta el diseñador de WinForms. El diseñador de WPF SUCKS - y me han dicho que no lo use, y simplemente codifique en XAML ... ¡suspiro! – series0ne

11

WPF trae

  • declarativa UI Programación: La presentación o aspecto de la interfaz de usuario (XAML) ha sido separado del código (.cs et all.) Tal que la XAML puede ser creada de forma independiente por personas que son buenas en ese tipo de cosas: diseñadores gráficos. A continuación, envían su apariencia final a los desarrolladores que solo escriben el código para que funcione. (Las cosas más simples pueden manejarse de nuevo directamente en XAML) Supuestamente para darle un mayor paralelismo y una buena UX (en oposición a las UI aprobadas por el desarrollador)
  • Enlace de datos: De nuevo, una declaración declarada.Usted declarativo especifica qué propiedad de modelo representa este control de UI, WPF se encarga de tirar los datos al control & actualizando los contenidos modificados junto con las notificaciones de cambio.
  • Mejorado Modelo de control compuesto - Ahora puede incrustar casi cualquier cosa dentro de cualquier cosa, por lo que ahora la imaginación no tiene límites.
  • Plantillas de datos, plantillas de control, etc. - una vez más la separación de la interfaz de usuario del código. Estas plantillas XAML especifican (una vez) cómo debería verse una estructura de datos o Control de UI para el usuario.
  • mejor en X: Por supuesto EM mejoró en un montón de otros aspectos como la representación (un menor número de cambios que GDI), Escala (independencia resolución), Transparencia, Presentaciones (no absoluta), la representación de texto, animación & El soporte de video, Un modelo de evento mejorado, et. todos
  • Estilos, activadores: Es más fácil aplicar uniforme look-and-feel en todo el mundo con estilos in-one-place (XAML nuevamente). Los desencadenantes son bloques de código que se ejecutan cuando ocurre algún evento, p. 'el texto de este control cambió ... así que ahora actualice su propiedad de primer plano a azul para indicar' modificado ''. Se pueden hacer cosas simples directamente en XAML.
+1

Bonito detalle, pero necesita un prcis: WPF es marcado para UI, a la HTML, con soporte directo para la mayoría de GDI + y extenso enlace explícito para eventos UI. –

0

También encontré que XAML es un poco complicado al principio, pero una vez que me acostumbré, me pareció bastante simple (una vez que conoces los controles básicos). Una de las mejores cosas al respecto es Databinding.

Por lo general, cuando escribo una aplicación WPF, la uso para casi todo en mi interfaz de usuario. El enlace de los controles a los comandos y las propiedades de un modelo de vista puede separar por completo la presentación del diseño, por lo general no tengo una sola línea de código en mi código subyacente. Eso hace que mis objetos lógicos ViewModel/business sean fácilmente comprobables y completamente independientes de cualquier representación visual, que a su vez puede reemplazarse fácilmente.

1

He estado trabajando casi exclusivamente en WinForms durante los últimos 4 años y he empezado a usar WPF para un par de pequeños proyectos en el trabajo. La curva de aprendizaje es empinada. Pero una vez que te acostumbras, vale la pena.

WPF es mucho más que solo un visualmente atractivo como el despellejamiento o la animación. Incluso para aplicaciones básicas para rastrear pedidos de envío, puede aprovechar WPF. WinForms solo lo lleva tan lejos con sus controles. Si quería mostrar una interfaz de usuario ligeramente personalizada, a menudo tenía que dibujar sus controles con GDI, lo que puede convertirse rápidamente en una pesadilla. En WPF, la personalización de cualquier cosa es trivial a través de las plantillas de datos. Puede personalizar fácilmente elementos del cuadro de lista, agregar controles para mostrar columnas de la lista, o encabezados, etc. WPF le permite tomar el control de diseños de interfaz de usuario complejos con su potente sistema de diseño. También me sorprende la poca cantidad de código que se necesita en WPF para lograr las mismas cosas que solía hacer en WinForms, así que esto significa menos errores y aplicaciones más fáciles de mantener.

+0

Si puede, envíe una referencia o dos de los documentos o tutoriales existentes para los programadores de "WPF for Windows Forms". Eso sería útil. – zumalifeguard

+0

WPF y WinForms tienen muy poco en común, por lo que cualquier tutorial debería funcionar. Un buen lugar para mirar es http://www.wpftutorial.net. –

0

Aquí estoy tratando de responder en términos ingenuos muy simples sobre algunas de las preguntas de WPF que enfrentan los desarrolladores de principiantes/winforms y algo que enfrenté cuando comencé con WPF. Hay muchos artículos y tutoriales en Internet que brindan suficiente conocimiento, pero es difícil encontrar respuestas a preguntas muy simples. Estoy tratando de abordarlo aquí.

¿Qué es WPF?

Windows Presentation Foundation conforme avanza la expansión; es un sistema de "Presentación" para construir aplicaciones de Windows. Si usted es un desarrollador de winforms, la principal diferencia que encontraría en WPF es la apariencia del diseñador. A diferencia de winforms, el código de diseñador no es el código C# sino el código XAML.

¿Por qué WPF?

Bueno, la razón principal de que WPF sea preferible a las formas de victoria es que WPF proporciona una interfaz de usuario rica. Aparte de esto, hay muchos otros beneficios que proporciona WPF, está disponible más claramente en muchos tutoriales en Internet. Es un motor de representación basado en vectores. Si uno simplemente compara la UI de una aplicación winform y una aplicación WPF, la diferencia en términos de apariencia quedará en claro.

¿Qué es MVVM?

MVVM es un patrón, que se adapta al desarrollar las aplicaciones. Se expande como "Model View View Model", básicamente, mientras estructuramos el proyecto, tenemos una carpeta modelo bajo la cual se colocarían todos los archivos de modelo (.cs), debajo de la carpeta view model todos los archivos de modelo de vista (.cs) serían colocado y debajo de la carpeta de vista se colocarán todos los archivos de vista (.xaml). Si se usa MVVM, no habrá ningún código detrás, lo que significa que el archivo .xaml.cs no tendrá ningún código, excepto el método creado automáticamente.

Modelo: El modelo tiene la parte de lógica de negocios que admite el modelo de vista con los datos que finalmente se presentarán en la vista.

ViewModel: Cada vista tendría un modelo de vista. Viewmodel implementaría la interfaz INotifyPropertyChanged y tendría todas las propiedades vinculadas a la vista correspondiente. El modelo de vista no está cargado con ninguna lógica comercial y la responsabilidad recae en el modelo.

Ver: Ver no es más que el archivo xaml donde está diseñada la ventana. XAML es un lenguaje de marcado. En WPF, a diferencia de los winforms, cada control estaría vinculado con una propiedad de dependencia predefinida o definida por el usuario.

¿Por qué MVVM?

Cada vez que se desarrolla una aplicación en WPF, MVVM resulta útil. Una de las mayores ventajas de usar MVVM es que hace posible una prueba de unidad independiente de UI, ya que no hay código detrás durante la prueba de la unidad. No se requieren objetos relacionados con UI y, por lo tanto, es posible una cobertura de código del 100%. En la prueba de unidad, el usuario puede pasar 'comandos' (buscar comandos en wpf) para probar un caso de uso particular.

¿Es un mandato o una necesidad absoluta ir con MVVM cuando se trabaja con WPF?

Yo diría que no, no es obligatorio ir con MVVM cuando se trabaja con WPF, pero depende del requisito. Uno tiene que ver la ventaja que proporciona MVVM y luego decidir si aceptarlo o no. MVVM se suma a la complejidad durante los días iniciales de desarrollo, pero finalmente viene con sus beneficios. Si la aplicación completa está en winforms y solo se está desarrollando un pequeño módulo en lugar de una característica pequeña en WPF, entonces no sería necesario seguir MVVM, uno puede felizmente tener código detrás y obtener la rica experiencia de UI. De nuevo, lo repetiría completamente, depende del tipo de requisito.

¿Puedo tener múltiples modelos de vista para una sola vista/múltiples vistas en un solo modelo de vista?

Esta es una pregunta para la que no tengo una respuesta clara y nítida en ninguna comunidad .net. En primer lugar, como vimos que la intención principal de ir con MVVM es lograr una cobertura de código del 100%, esto hace que sea obvio que vamos a probar cada modelo de vista de forma independiente y, por lo tanto, se prueba una forma completa. Teniendo esto en cuenta, es mejor optar por un enfoque de view view de una vista. Siempre podemos comunicarnos entre los modelos de vista si es necesario usando MVVM Light Messenger o cualquier otro medio que lo facilite.

¿Cuál es la diferencia entre viewmodel y model?

Esta es una pregunta que los principiantes siempre tendrían ya que no encuentran mucha diferencia entre los dos. Aquí está la diferencia: - El modelo no es más que una clase que tiene los métodos de datos para modificar los datos, que se usarían en el modelo de vista y, finalmente, enlazarían a la vista. ViewModel solo tiene las propiedades que se vincularán a la vista. En los métodos get o set, se puede llamar a un método en el modelo para obtener los datos. De nuevo, este modelo es para este modelo de vista particular. Ahora puede decidir si realmente necesita una clase de modelo, si no hay una lógica comercial pesada, entonces puede evitar una clase de modelo y colocarla en el modelo de vista, pero el limpiador sería usar una clase de modelo.

En MVVM, ¿puedo omitir un modelo de vista o una clase de modelo para una vista?

De nuevo depende del requisito mencionado anteriormente, si no hay una lógica comercial pesada, entonces puede evitar una clase modelo y colocarla en el modelo de vista, pero el enfoque más limpio sería usar una clase modelo.

Cuestiones relacionadas