2010-04-26 38 views
13

Tôi đang sử dụng tính năng d: DesignInstance mới của các công cụ WPF 4.0. Hoạt động tuyệt vời!Cách đặt thuộc tính của d: DesignInstance trong XAML?

Chỉ vấn đề tôi gặp phải là: làm cách nào tôi có thể đặt thuộc tính trên cá thể? Cho một cái gì đó như thế này:

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

Làm thế nào tôi có thể đặt thuộc tính trên viewmodel, ngoài việc đặt chúng trong bộ định tuyến mặc định hoặc định tuyến thông qua một số bộ khởi tạo đối tượng khác?

Tôi đưa cho một thử này nhưng VS cho lỗi trên biên dịch "d: DataContext không tìm thấy":

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

Đối với thời điểm tôi sẽ trở lại sử dụng một nguồn tài nguyên và 'd: DataContext = { StaticResource SampleData} ', nơi tôi có thể thiết lập các thuộc tính trong tài nguyên.

Có cách nào để thực hiện thông qua d: DesignInstance không?

+0

Bạn phải hoặc là: 1. Sử dụng ctor mặc định hoặc 2. Sử dụng d: [DesignData] (http: //msdn.micros oft.com/en-us/library/ee823176.aspx) thay vì d: DesignInstance –

+0

Đây là trường hợp ngoại lệ đầy đủ (Có ích cho việc googling câu trả lời này): Lỗi Loại 'd: DataContext' không được tìm thấy. Xác minh rằng bạn không thiếu tham chiếu assembly và tất cả các assembly được tham chiếu đã được xây dựng. –

Trả lời

22

Vì @jberger có lẽ bạn nên sử dụng d:DesignData thay vì gạch chân d:DataContext.

Tuy nhiên bạn có thể thiết lập các d: DataContext inline trong file XAML là tốt, bí quyết là sử dụng lớp đúng (DesignProperties) để đủ điều kiện d:DataContext tài sản:

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

Làm thế nào để bạn biết những gì lớp để đủ điều kiện với? Di chuột qua thuộc tính được đặt trong cú pháp thuộc tính và chú giải công cụ sẽ xuất hiện với tên thuộc tính đủ điều kiện.

Cũng lưu ý rằng không sử dụng mã vạch đánh dấu d:DesignInstance vì công việc cụ thể là tạo một thể hiện kiểu mà bạn cung cấp tên (hoặc tạo proxy cho loại đó nếu không thể được thiết kế tại thời điểm thiết kế) . Đó không phải là những gì chúng ta muốn, chúng ta muốn định nghĩa cá thể trong xaml nội tuyến trong trường hợp này. Thực tế, d:DesignData (cũng là một phần mở rộng đánh dấu) hoạt động giống nhau, ngoại trừ việc nó tìm kiếm một tập tin xaml và deserializes rằng để dụ thực tế để sử dụng thay vì chỉ sử dụng constructor mặc định.

Chỉ cần cho đầy đủ tôi cũng nên đề cập đến mà bạn có thể sử dụng DesignData và DesignInstance với cú pháp nguyên tố cũng bằng cách sử dụng tên của họ đầy đủ lớp (xxxExtension):

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

Điều này đúng đối với hầu hết exstensions đánh dấu nhưng không yêu cầu phải làm theo cách đặt tên convension này (lớp Binding là một ngoại lệ đáng chú ý) Xem thêm thông tin có thể được tìm thấy ở đây:

Markup Extensions and WPF XAML

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