2010-05-04 54 views
1

我想創建僅在設計模式下創建的示例數據(當WPF窗口顯示在Visual Studio WPF設計器或Expression Blend中時)。我試過這個:WPF:如何在設計模式下創建示例數據?

public MainWindow() 
{ 
    InitializeComponent(); 

    if (DesignerProperties.GetIsInDesignMode(this)) 
    { 
     DataContext = new Person() { Name = "Harry" }; 
    } 
} 

看來,設計者並沒有調用Window類的構造函數。我需要在C#代碼中創建示例數據,因爲它們實例化起來更加複雜。有任何想法嗎?

+1

http://www.galasoft.ch/mydotnet/articles/article-2007091401.html – user7116 2010-05-04 20:25:07

+0

使用來自@sixlettervariables的鏈接我管理它通過使用代碼工作。關鍵是在XAML中創建資源 - 我的自定義DataProvider的實例,使用無參數構造函數填充我的數據。 – surfen 2011-11-28 21:03:24

回答

1

現在我使用Visual Studio 2010和Expression Blend 4的設計時支持。這個新功能可以滿足我的大部分要求。

該工作原理如下所示BookLibrary示例應用程序WPF Application Framework (WAF)。請下載WAF的.Net4版本。

3

如果您在XAML中直接或通過綁定來設置DataContext,則可避免構造函數跳過的問題。新版本的工具還支持設置d:DataContext,該設計時只會調用DataContext來設置DataContext。如果你的實例化不能直接在XAML中完成(即構造函數參數),你可以在MainWindow.xaml.cs中聲明一個get屬性來實例化並返回你的設計數據實例。將整個對象創建保留在getter中將防止它在運行時被創建,因爲它永遠不會被調用。

public MyData { get { return new Person() { Name = "Harry" }; } } 

然後在XAML中,您可以將窗口的d:DataContext綁定到新屬性。

d:DataContext="{Binding RelativeSource={RelativeSource Self}, Path=MyData}" 

還有很多其他的選擇可以做到這一點,但這是最接近用戶界面的,所以通常最容易添加到現有代碼中。 Josh Smith最近對不同選項做了很好的概述:Design-time data is still data

+2

感謝您的回答 - 您的解決方案看起來非常棒。不幸的是,我用VS2010試了一下,但沒有奏效。這個綁定真的適用於d:DataContext嗎? – jbe 2010-05-04 21:17:23

+0

也不適用於我。 – surfen 2011-11-28 20:04:31