WPF: Как я могу создать пример данных в режиме разработки? - PullRequest
1 голос
/ 05 мая 2010

Я хотел бы создать образцы данных, которые создаются только в режиме разработки (когда окно WPF отображается в Visual Studio WPF Designer или в Expression Blend). Я попробовал это:

public MainWindow()
{
    InitializeComponent();

    if (DesignerProperties.GetIsInDesignMode(this))
    {
        DataContext = new Person() { Name = "Harry" };
    }
}

Кажется, что конструктор не вызывает конструктор класса Window. Мне нужно создать пример данных в коде C #, потому что их сложнее создавать. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

Если вы выполняете настройку DataContext в XAML, либо напрямую, либо с помощью Binding, вы избегаете проблемы пропуска конструктора. Более новые версии инструментов также поддерживают настройку d: DataContext, которая будет вызываться только во время разработки для установки DataContext. Если ваше создание экземпляра не может быть выполнено непосредственно в XAML (то есть в параметрах конструктора), вы можете просто объявить свойство get в MainWindow.xaml.cs, чтобы создать экземпляр и вернуть экземпляр данных проекта. Сохранение всего объекта создания в получателе будет препятствовать его созданию во время выполнения, потому что он никогда не будет вызван.

public MyData { get { return new Person() { Name = "Harry" }; } }

Затем в XAML вы можете привязать d: DataContext для окна к новому свойству.

d:DataContext="{Binding RelativeSource={RelativeSource Self}, Path=MyData}"

Есть много других способов сделать это, но это наиболее близко к пользовательскому интерфейсу, поэтому обычно его легче всего добавить в существующий код. Джош Смит недавно сделал хороший обзор различных вариантов: Данные во время разработки все еще данные

1 голос
/ 10 июля 2010

Теперь я использую поддержку времени разработки Visual Studio 2010 и Expression Blend 4. Эта новая функция отвечает большинству моих требований.

Как это работает, показано в BookLibrary примере приложения WPF Application Framework (WAF) . Пожалуйста, скачайте .Net4 версию WAF.

...