2010-04-26 12 views
13

Estoy usando la nueva característica d: DesignInstance de las herramientas WPF de la serie 4.0. ¡Funciona genial!Cómo establecer las propiedades de un d: DesignInstance en XAML?

El único problema que estoy teniendo es: ¿cómo puedo establecer propiedades en la instancia? Teniendo en cuenta algo como esto:

<Grid d:DataContext="{d:DesignInstance plugin:SamplePendingChangesViewModel, IsDesignTimeCreatable=True}"/> 

¿Cómo puedo configurar las propiedades en el modelo de vista, aparte de la que fueron en su defecto ctor o encaminamiento a través de algún otro objeto iniciador?

me dio esta probarlo pero VS da errores en la compilación "d: DataContext no se encontró":

<Grid> 
    <d:DataContext> 
     <d:DesignInstance IsDesignTimeCreatable="True"> 
      <plugin:SamplePendingChangesViewModel ActiveTagIndex="2"/> 
     </d:DesignInstance> 
    </d:DataContext> 

Por el momento voy a volver a utilizar un recurso y 'd: = {DataContext StaticResource SampleData} ', donde puedo establecer las propiedades en el recurso.

¿Hay alguna manera de hacerlo a través de d: DesignInstance?

+0

tienes que sea: 1. uso del ctor por defecto o 2. uso d: [DesignData] (http: //msdn.micros oft.com/en-us/library/ee823176.aspx) en lugar de d: DesignInstance –

+0

Esta es la excepción completa (útil para buscar en Google esta respuesta): Error No se encontró el tipo 'd: DataContext'. Verifique que no le falta una referencia de ensamblado y que todos los ensamblados a los que se hace referencia han sido construidos. –

Respuesta

22

Como @jberger probablemente debería usar d:DesignData en lugar de marcar d:DataContext.

Sin embargo se puede establecer el d: DataContext en línea en el archivo XAML, así, el secreto es utilizar la clase correcta (DesignProperties) para calificar el d:DataContext propiedad:

<d:DesignProperties.DataContext> 
    <plugin:SamplePendingChangesViewModel ActiveTagIndex="2"/> 
</d:DesignProperties.DataContext> 

¿Cómo sabe qué clase para calificar? Pase el mouse sobre una propiedad que esté configurada en la sintaxis de los atributos y aparecerá una información sobre herramientas con el nombre completo de la propiedad.

Tenga en cuenta también que no estoy utilizando la extensión de marcado d:DesignInstance ya que su trabajo es crear una instancia de un tipo que proporcione el nombre (o generar un proxy de ese tipo si no se puede instanciar en tiempo de diseño) . Eso no es lo que queremos, queremos definir la instancia en xaml en línea en este caso.

De hecho, d:DesignData (también una extensión de marcado) funciona casi de la misma manera, excepto que busca un archivo XAML y deserializa que a la instancia real para usar en lugar de usar el constructor por defecto.

simplemente para la corrección También debería mencionar que se puede utilizar DesignData y DesignInstance con la sintaxis de elementos, así mediante el uso de sus nombres de clase completos (xxxExtension):

<d:DesignProperties.DataContext> 
    <d:DesignDataExtension Source="SampleData.xaml"></d:DesignDataExtension> 
</d:DesignProperties.DataContext> 

Esto es cierto para la mayoría de exstensions de marcado pero no es necesaria para seguir este convension denominación (la clase Binding es una excepción notable) Más información se puede encontrar aquí:

Markup Extensions and WPF XAML

Cuestiones relacionadas