2011-01-17 17 views
8

[utilizando VS2010 & expresión mezcla v4]datos de tiempo en WPF

Hi - intentar cargar algunos datos en tiempo de diseño en WPF y Blend, utilizando el concepto de Josh Smith aquí: http://joshsmithonwpf.wordpress.com/2010/04/07/assembly-level-initialization-at-design-time/ por ejemplo,

[AttributeUsage(AttributeTargets.Assembly)] 
public class DesignTimeBootstrapperAttribute : Attribute 
{ 
    public DesignTimeBootstrapperAttribute(Type type) 
    { 
     var dep = new DependencyObject(); 
     Debug.WriteLine("here..?"); 
     if (DesignerProperties.GetIsInDesignMode(dep)) 
     { 
      // TODO: Design-time initialization… 
      IBootstrapper instance = Activator.CreateInstance(type) as IBootstrapper; 
      if (instance != null) 
      { 
       instance.Run(); 
      } 
     } 
    } 
} 

Con mi atributo de aquí en AssemblyInfo.cs, donde AppBootstrapper extiende MefBootstrapper.

[assembly: AssemblyCopyright("Copyright © 2010")] 
[assembly: AssemblyTrademark("")] 
[assembly: AssemblyCulture("")] 
[assembly: DesignTimeBootstrapper(typeof(AppBootstrapper))] 

no quiero utilizar los datos de la muestra de mezcla, a), ya que no parece crear datos para ObservableCollection yb) Estoy en el modo de diseño, por definición, así que las cosas van a cambiar bastante mucho, pero mis 'datos generados' no lo harán.

De todos modos, nada parece estar sucediendo.

Q1: ¿Cómo es posible depurar la inicialización del tiempo de diseño de mi bootstrapper? P2: ¿Necesito espacios/espacios de nombres de mezclas adicionales, etc. en mi View XAML?

(En mi bootstrapper estoy registrando un módulo diferente donde quiero reemplazar RunTimeService con un DesignTimeService, exportando la interfaz IService).

TIA

+0

¿Ha tenido éxito en hacer este pedazo de código funciona? – EngineerSpock

Respuesta

3

Para depurar esto:

  • Abra el proyecto en VS2010
  • Establecer un punto de interrupción en el conjunto de atributos constructor
  • inicio de una nueva instancia de Blend 4
  • De VS2010 use Depurar -> Adjuntar al proceso: y elija Mezcla
  • Cambie a Mezcla y abra su proyecto
  • abrir un archivo XAML que hace referencia a los datos de la muestra

Además, cualquier Debug.WriteLine debería aparecer en la ventana de salida VS2010.

Si no se puede obtener el método de atributos para trabajar (no he probado a mí mismo), puede utilizar este método (que he usado) de MVVM Light:

private bool? _isInDesignMode; 

public bool IsInDesignMode 
{ 
    get 
    { 
     if (!_isInDesignMode.HasValue) 
     { 
      var prop = DesignerProperties.IsInDesignModeProperty; 
      _isInDesignMode = 
       (bool)DependencyPropertyDescriptor 
       .FromProperty(prop, typeof(FrameworkElement)) 
       .Metadata.DefaultValue; 
     } 

     return _isInDesignMode.Value; 
    } 
} 
+1

Entonces, ¿en su ViewModel verifica si es verdadero y luego devuelve sus datos falsos desde una propiedad de VM, como un ObservableCollection? El problema que podría ver entonces sería conectar el ViewModel y la Vista, ya que estoy usando MEF y Prism. Echaré un vistazo a la forma en que dijiste para cablear vs2010 y mezclar, entonces tal vez pueda hacerlo funcionar. Gracias. – Ian

Cuestiones relacionadas