2010-10-16 97 views
4

目前我正在嘗試加載一些Xaml文件來創建測試數據。從Xaml文件創建數據對象

我使用Xaml文件爲Visual Studio中的WPF設計器(DesignData)創建數據。 現在我想在我的單元測試中重用它們。我需要以編程方式加載它們。這裏是一個小的測試程序:

// The data model 
class TestItem 
{ 
    public string Name { get; set; } 
    public decimal Value { get; set; } 
    public string Category { get; set; } 
} 

XAML中的數據文件:

<sys:ArrayList xmlns:sys="clr-namespace:System.Collections;assembly=mscorlib" 
       xmlns:local="clr-namespace:WpfApplication1"> 
    <local:TestItem Name="Item1" Value="123" Category="Cat1" /> 
    <local:TestItem Name="Item2" Value="456" Category="Cat1" /> 
    <local:TestItem Name="Item3" Value="789" Category="Cat2" /> 
</sys:ArrayList> 

現在我嘗試讀取數據:

var reader = new System.Windows.Markup.XamlReader(); 

var obj = reader.LoadAsync(File.OpenRead("Test.xaml")); 

的LoadAsync方法拋出XamlParseException。

「無法創建未知類型 '{CLR的命名空間:WpfApplication1} TestItem'

我需要以某種方式註冊我的TestItem類?這是解決我的問題的正確方法,還是我在這裏錯過了XamlReader?我也花了一些時間在System.Xaml-命名空間。但我無法得到它的工作。

編輯:

在上面的示例代碼,我設置了生成操作爲None。當我將其設置爲DesignData時,無法找到該文件。

回答

2

我發現了錯誤。使TestItem類公開解決我的問題。

// The data model 
public class TestItem 
{ 
    public string Name { get; set; } 
    public decimal Value { get; set; } 
    public string Category { get; set; } 
} 
2

我相信你的方法應該可以正常工作。

您提到您正在重複使用相同的代碼來編寫單元測試(如果我的理解正確,這是您獲取異常的位置)。如果您正在編寫測試並在定義了TestItem的其他程序集中加載XAML,那麼您需要在xmlns:local屬性中指定程序集名稱。

+0

我在一個程序集中創建了上面的示例代碼。 xmlns:local被設置爲正確的名稱空間。我已將Xaml文件的構建操作設置爲無(請參閱我的更新)。仍然沒有工作。 – PetPaulsen 2010-10-16 18:55:53