2011-01-17 50 views
8

[sử dụng VS2010 & biểu hiện sự pha trộn v4]dữ liệu thời gian thiết kế trong WPF

Hi - cố gắng để tải lên một số dữ liệu thời gian thiết kế trong WPF và Blend, sử dụng khái niệm Josh Smith ở đây: http://joshsmithonwpf.wordpress.com/2010/04/07/assembly-level-initialization-at-design-time/ ví dụ

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

Với thuộc tính của tôi ở đây trong AssemblyInfo.cs, nơi AppBootstrapper mở rộng MefBootstrapper.

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

Tôi không muốn sử dụng dữ liệu mẫu Trộn, a) dường như không tạo dữ liệu cho ObservableCollection và b) Tôi đang ở chế độ thiết kế theo định nghĩa, vì vậy mọi thứ sẽ thay đổi hoàn toàn rất nhiều, nhưng 'dữ liệu được tạo' của tôi sẽ không.

Dù sao, dường như không có gì xảy ra.

Q1: Làm thế nào để gỡ lỗi thời gian thiết kế của bootstrapper của tôi? Q2: Tôi có cần thêm các vùng tên/thuộc tính kết hợp v.v. trong XAML của tôi không?

(Trong bootstrapper của tôi, tôi chỉ đăng ký một mô-đun khác mà tôi muốn thay thế RunTimeService bằng một DesignTimeService, xuất giao diện IService).

TIA

+0

Các bạn đã thành công trong việc đưa ra đoạn mã này hoạt động? – EngineerSpock

Trả lời

3

Để gỡ lỗi này:

  • Mở dự án của bạn trong VS2010
  • Đặt một breakpoint trong lắp ráp các thuộc tính constructor
  • Bắt đầu một trường hợp mới của Blend 4
  • Từ VS2010 sử dụng Debug -> Attach to Process: và chọn Blend
  • Chuyển sang Blend và mở dự án của bạn
  • Mở một tập tin XAML tham chiếu dữ liệu mẫu của bạn

Ngoài ra, bất kỳ Debug.WriteLine sẽ xuất hiện trong cửa sổ đầu ra VS2010.

Nếu bạn không thể có được phương pháp thuộc tính để làm việc (tôi đã không thử nó bản thân mình), bạn có thể sử dụng phương pháp này (mà tôi đã sử dụng) từ 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

Vì vậy, trong ViewModel của bạn để bạn kiểm tra xem đó là sự thật và sau đó trả lại dữ liệu giả của bạn từ một tài sản VM, giống như một ObservableCollection? Vấn đề tôi có thể thấy sau đó sẽ được nối dây lên ViewModel và Xem như tôi đang sử dụng MEF và Prism. Tôi sẽ có một cái nhìn vào cách bạn nói để dây lên vs2010 và pha trộn sau đó có lẽ tôi có thể nhận được rằng làm việc. Cảm ơn. – Ian

Các vấn đề liên quan