2010-02-16 327 views
1

我遇到了數據綁定到WPF中的服務類的問題。我的服務類有一個靜態構造函數,它讀取配置信息並提取一些必需的信息。問題是,在設計過程中,Mytype的類型初始值設定項出現錯誤,導致異常。我相信這是因爲配置信息不存在於Visual Studio的配置中。當我運行應用程序時,一切正常,但由於此錯誤,我無法設計任何東西。wpf設計師:類型初始值設定項引發異常

我會假設設計會恢復到一些默認顯示,如果它不能得到我的數據綁定對象。顯然它不會殺死整個設計師。是否有任何解決此問題的方法,如關閉數據綁定控件的動態顯示。這是令人沮喪和令人失望的。我正在使用Visual Studio 2008 SP1。

這裏是我的網格中的數據綁定代碼片段。

<ObjectDataProvider ObjectType="{x:Type local:DataService}" x:Key="dataProvider" 
    MethodName="GetCollection" > 
    <ObjectDataProvider.MethodParameters> 
     <s:Int32>1</s:Int32> 
    </ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

本質上DataService類不能實例化自己,除非它有配置信息。我試圖爲靜態構造函數實例化數據存儲庫的具體實現的特定情況創建一個解決方法。不過,我不能直接這樣做,因爲這會在我的項目中創建一個循環引用。我試過繼承這個類並捕獲父類的靜態構造函數中的所有異常。這仍然行不通。有關變通方法或錯誤日誌的其他任何想法,都會顯示有關拋出什麼異常的更多詳細信息。

我試過剝去一切,找到最低公分母。我刪除了靜態構造函數,基本上返回了最基本的東西。我發現,從數據庫中檢索數據的任何內容都無法呈現。如果我返回一個靜態列表,一切都很好。我正在使用Microsoft企業庫數據訪問塊。同樣,應用程序在運行時也能正常工作。我假設它找不到所需的數據庫連接信息,但爲什麼這會成爲一個問題?微軟不得不認爲這會發生在他們構建VS2008時。難道我做錯了什麼?

回答

2

你是對的。 Visual Studio設計器無法訪問您的數據庫連接字符串。提供設計時數據的常見方式是首先檢查應用程序是否處於設計模式,如果是,則返回一些虛擬數據而不與數據庫建立任何連接。

像下面

public class DataService 
{ 

    public IList<string> GetCollection() 
    { 

     if (!DesignerProperties.GetIsInDesignMode(new DependencyObject())) 
     { 

     // get data from database here 
     } 
     else 
     { 
     // return fake data for the designer 
     return new List<string> {"my", "test", "data"}; 
     } 
    } 
} 

重要的事情是什麼時,將需要的配置是否會在設計模式被用來永遠不會調用。

+0

我對這種方法的擔憂是它需要我的數據服務以某種形式或形式引用UI。在這種情況下,我需要一個對System.ComoonentModel的引用。但我也需要一個到System.Windows,這似乎很奇怪和錯誤。這種行爲在vs2010中發生了任何變化。暫時,我選擇了通過設置datacontext在加載事件中進行數據綁定,並處理設計師向我展示空白的東西。看起來很愚蠢,但我寧願創造這個討厭的條件邏輯來滿足VS的設計師 – 2010-02-16 22:49:37

相關問題