2011-01-17 2 views
8

[en utilisant VS2010 & expression mélange v4]données en temps Design WPF

Salut - en essayant de charger des données de temps de conception dans WPF et mélange, en utilisant le concept de Josh Smith ici: http://joshsmithonwpf.wordpress.com/2010/04/07/assembly-level-initialization-at-design-time/ par exemple

[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(); 
      } 
     } 
    } 
} 

Avec mon attribut ici à AssemblyInfo.cs, où s'étend AppBootstrapper MefBootstrapper.

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

Je ne veux pas utiliser les données d'échantillon Blend, a) car il ne semble pas créer des données pour ObservableCollection et b) Je suis en mode conception par définition, donc les choses vont beaucoup changer beaucoup, mais mes «données générées» ne le seront pas.

De toute façon, rien ne semble se passer.

Q1: Comment est-il possible de déboguer l'initialisation du temps de conception de mon bootstrappeur? Q2: Ai-je besoin d'autres espaces de noms/attributs de mélange dans ma vue XAML?

(Dans mon programme d'amorçage, je suis en train d'enregistrer un module différent où je veux remplacer RunTimeService par un DesignTimeService, en exportant l'interface IService).

TIA

+0

Avez-vous réussi à faire ce morceau de code de travail? – EngineerSpock

Répondre

3

Pour déboguer ceci:

  • Ouvrez votre projet dans VS2010
  • Définir un constructeur attribut point d'arrêt dans l'assemblage
  • Démarrer une nouvelle instance de Blend 4
  • De VS2010 utilisez Debug -> Attach to Process: et choisissez Blend
  • Basculez vers Blend et ouvrez votre projet
  • Ouvrir un fichier XAML qui fait référence à vos données d'échantillons

En outre, toute Debug.WriteLine devrait apparaître dans la fenêtre de sortie de VS2010.

Si vous ne pouvez pas obtenir la méthode d'attribut au travail (je n'ai pas essayé moi-même), vous pouvez utiliser cette méthode (que je l'ai utilisé) 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

Dans votre ViewModel, vérifiez-vous s'il est vrai et renvoyez vos fausses données à partir d'une propriété VM, comme une ObservableCollection? Le problème que je pourrais voir alors serait de câbler le ViewModel et la vue pendant que j'utilise MEF et Prism. Je vais jeter un oeil à la façon dont vous avez dit de filer vs2010 et de mélanger alors peut-être que je peux obtenir ce travail. Merci. – Ian