目前我正在尝试加载一些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时,无法找到该文件。
答案 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; }
}