WPF: как создать образец данных в режиме разработки?

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

public MainWindow()
{
    InitializeComponent();

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

Похоже, что конструктор класса Window конструктор не вызывает. Мне нужно создать образцы данных в коде C #, потому что их сложнее создать. Любые идеи?


person jbe    schedule 04.05.2010    source источник
comment
galasoft.ch/mydotnet/articles/article-2007091401.html   -  person user7116    schedule 05.05.2010
comment
Используя ссылку из @sixlettervariables, мне удалось заставить его работать с помощью кода. Ключевым моментом было создание ресурса в XAML - экземпляра моего настраиваемого DataProvider с конструктором без параметров, заполняющим мои данные.   -  person surfen    schedule 29.11.2011


Ответы (2)


Если вы выполняете настройку DataContext в XAML напрямую или с помощью привязки, вы избегаете проблемы пропуска конструктора. Новые версии инструментов также поддерживают установку 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}"

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

person John Bowen    schedule 04.05.2010
comment
Спасибо за ответ - ваше решение выглядит действительно здорово. К сожалению, я попробовал это с VS2010, но это не сработало. Действительно ли эта привязка работает для d: DataContext? - person jbe; 05.05.2010

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

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

person jbe    schedule 10.07.2010