Создать объекты данных из файла Xaml - PullRequest
4 голосов
/ 16 октября 2010

В настоящее время я пытаюсь загрузить некоторые файлы Xaml для создания тестовых данных.

Я использовал файлы Xaml для создания данных для дизайнера WPF в Visual Studio ( 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-namespace: WpfApplication1} TestItem '

Нужно ли каким-либо образом регистрировать мой класс TestItem?Это правильный подход для решения моей проблемы, или я не использую XamlReader здесь?Я также провел некоторое время в System.Xaml -Namespace.Но я не смог заставить его работать.

Редактировать:

В приведенном выше примере кода я установил для параметра Действия сборки значение Нет.Когда я устанавливаю его в DesignData, файл не может быть найден.

Ответы [ 2 ]

2 голосов
/ 17 октября 2010

Я нашел ошибку.Обнародование класса TestItem решило мою проблему.

// The data model
public class TestItem
{
    public string Name { get; set; }
    public decimal Value { get; set; }
    public string Category { get; set; }
}
2 голосов
/ 16 октября 2010

Я считаю, что ваш подход должен работать нормально.

Вы упоминаете, что повторно используете один и тот же код для написания модульных тестов (вот где вы получите исключение, если я правильно понимаю).Если вы пишете тесты и загружаете XAML в другую сборку, отличную от той, в которой определена TestItem, вам необходимо указать имя сборки в атрибуте xmlns:local.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...