2011-01-17 10 views
8

[mit VS2010 & Expression Blend v4]Design-Zeitdaten in WPF

Hallo - versuchen, einige Design-Zeitdaten in WPF zu laden und Ausblenden, Josh Smith Konzept hier mit: http://joshsmithonwpf.wordpress.com/2010/04/07/assembly-level-initialization-at-design-time/ z.B.

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

Mit meinem Attribut hier in AssemblyInfo.cs, wo AppBootstrapper MefBootstrapper erstreckt.

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

Ich mag nicht die Mischung Beispieldaten verwenden, a), da es nicht für ObservableCollection zu schaffen Daten scheint und b) ich im Entwurfsmodus definitions bin, so die Dinge ziemlich verändern werden viel, aber meine 'generierten Daten' werden nicht.

Wie auch immer, scheint nichts zu passieren.

F1: Wie ist es möglich, die Entwurfszeitinitialisierung meines Bootstrappers zu debuggen? F2: Benötige ich zusätzliche Blend-Namespaces/Attribute usw. in meinem View XAML?

(In meinem Bootstrapper registriere ich nur ein anderes Modul, wo ich RunTimeService mit einem DesignTimeService ersetzen und die IService-Schnittstelle exportieren möchte).

TIA

+0

Haben Sie bei der Herstellung gelungen dieser Block des Codes arbeiten? – EngineerSpock

Antwort

3

Um dies zu debuggen:

  • Öffnen Sie Ihr Projekt in VS2010
  • ein Breakpoint
  • Starten Sie eine neue Instanz der Mischung in der Baugruppe Attributkonstruktor Set 4
  • Von VS2010 Verwenden Sie Debug -> Attach to Process: und wählen Sie Blend
  • Wechseln Sie zu Blend und öffnen Sie Ihr Projekt
  • eine XAML-Datei öffnen, die Ihre Daten Probe

Auch verweist, sollte jede Debug.WriteLine im VS2010 Ausgabefenster angezeigt.

Wenn Sie nicht das Attribut Methode bekommen zu arbeiten (ich habe es selbst nicht ausprobiert), können Sie diese Methode verwenden (die ich verwendet habe) von 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

Überprüfen Sie also in Ihrem ViewModel, ob es wahr ist, und geben Sie dann Ihre gefälschten Daten von einer VM-Eigenschaft wie einer ObservableCollection zurück? Das Problem, das ich dann sehen könnte, wäre, das ViewModel und die View zu verkabeln, während ich MEF und Prism verwende. Ich werde mir die Art und Weise ansehen, wie Sie gesagt haben, dass wir vs2010 verdrahten und dann verschmelzen sollen, vielleicht kann ich das funktionieren lassen. Vielen Dank. – Ian