从Xaml文件创建数据对象

时间:2010-10-16 18:25:55

标签: c# .net xaml

目前我正在尝试加载一些Xaml文件来创建testdata。

我使用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 - 命名空间中花了一些时间。但我无法让它发挥作用。

编辑:

在上面的示例代码中,我将Build Action设置为None。当我将其设置为DesignData时,无法找到该文件。

2 个答案:

答案 0 :(得分:2)

我相信你的方法应该可行。

您提到您正在重复使用相同的代码来编写单元测试(如果我理解正确的话,那就是您获得异常的地方)。如果您正在编写测试并在其他程序集中加载XAML而不是定义TestItem的程序集,那么您需要在xmlns:local属性中指定程序集名称。

答案 1 :(得分:2)

我发现了错误。使TestItem类公开解决了我的问题。

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