2009-06-03 12 views
9

Ok, tengo una pregunta general sobre WPF. Me he equivocado un poco con ASP.NET MVC y en el marcado tiene intellisense en tu objeto viewmodel para que no lo escribas mal (me encanta).WPF Databinding intellisense

Introduzca WPF, me encanta, estoy utilizando el enfoque MVVM y una cosa molesta que tengo que hacer es asegurarme de que estoy vinculando correctamente a mi modelo de vista. Así que escribo algo en mi xaml, entonces o bien 1) si soy perezoso solo ejecuto la aplicación y hago clic alrededor de 2) Si no soy flojo a) Mire el DataContext actual del control que estoy trabajando con. b) Vaya a esa clase de ViewModel para ver las propiedades c) Encuentre mi propiedad y luego haga clic en volver a mi vista y asegúrese de que la deletreé correctamente.

Creo que puede ver su salida de rastreo para enlaces incorrectos en tiempo de ejecución, pero hay algo en el horizonte para permitir intellisense en xaml. La vista necesita saber acerca de mi ViewModel, entonces ¿por qué no exponer eso en xaml?

creo que sería bueno para el IDE para hacer eso para mí, es decir, cuando escribo "{Binding" debe ascender por el árbol visual de encontrar la primera DataContext no nulo y mostrar las propiedades, vamos yo selecciono uno y ahí lo tiene.

¿Echo de menos algo? ¿Hay alguna alternativa? ¿Alguna idea?

EDIT:

En cuanto a los comentarios a continuación hay una manera de establecer el DataContext en tiempo de diseño, por ejemplo,

<Window.Resources> 
    <DesignTimeData:DesignTimeCustomers x:Key="designTimeCustomersDS" /> 
</Window.Resources> 

que es un fragmento de este blog: http://karlshifflett.wordpress.com/2008/10/11/viewing-design-time-data-in-visual-studio-2008-cider-designer-in-wpf-and-silverlight-projects/

Todo lo que hace referencia es una clase dentro de XAML.

Entonces, con eso en su lugar, ¿no podría el diseñador utilizar la reflexión en el contexto de datos para darle todas las propiedades para esa clase?

+0

De alguna manera, WPF realmente brilla; en otros, es un TPV. Este es uno de esos otros. –

+0

Es por eso que estoy usando pruebas para validar todas (bueno, casi todas) las vinculaciones de vista con los ViewModels correspondientes. – Snowbear

+0

Como ya se sugiere a continuación, use Resharper (con d: DataContext set), le ahorrará mucho tiempo. puede generar directamente propiedades de viewmodel desde xaml con alt + enter – Boklucius

Respuesta

4

Así que con eso en su lugar no podía el diseñador continuación, utilizar la reflexión sobre la DataContext para darle todas las propiedades de esa clase?

Resharper 6 tiene esta característica y puede mostrarle los miembros de d: DataContext en intellisense, si establece d: DataContext en la Vista.

4

Visual Studio 2010 admitirá intellisense en vinculaciones. Sin embargo, esto está limitado a las propiedades del objeto de enlace en sí. Por ejemplo, después de escribir "{Binding" en el editor de XAML, obtengo intellisense en las propiedades restantes (Path, ElementName, etc.).

No creo que el tipo de intellisense con respecto al contexto de datos que especificó sea posible ya que el contexto de datos se configura en tiempo de ejecución. Intenté experimentar en VS 2010 estableciendo el contexto de datos directamente en el constructor pero no tuve suerte.

+0

Aquí está el enlace para el video MIX09 que repasa parte de esto, avanza rápidamente a alrededor de 20 minutos para ingresar al selector de recursos e intellisence: http://videos.visitmix.com/MIX09/T73M – rmoore

+0

Dado que DataContext se establece como tiempo de ejecución, dudo que sea posible implementar intellisense para enlaces, desafortunadamente. El hecho de que el tipo de la variable configurada como DataContext sea Foo, realmente podría ser una barra y las propiedades de Bar son un juego justo para usar para enlaces. ¿Cómo podría Visual Studio saber que este es el caso? – Andy

+0

He hecho algunas actualizaciones arriba que básicamente indican que podemos asignar el contexto de datos en tiempo de diseño. Pero de sus comentarios, parece que esto no está en el horizonte. – Jose

4

VS 2013:

IntelliSense con resuelta DataContext enter image description here

IntelliSense con des tiempo de ignición DataContext enter image description here

Cuestiones relacionadas