2010-10-16 101 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