Что заставляет дизайнера Visual Studio использовать поддержку времени разработки

У меня есть библиотека aC# control, которая содержит мои модели, модели представления и представления. Я подключаю все как обычно, но не получаю никакой обратной связи от дизайнера Visual Studio (смешиваемость).

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

Было бы более эффективно для моего конвейера разработки, если бы я мог иметь поддержку смешиваемости (время разработки) в моей библиотеке классов? Что заставляет визуальную студию работать, чтобы показать мой текст времени проектирования?

Я даже пользуюсь d:DataContext="{d:DesignInstance dd:DesignViewModel}" в моей библиотеке классов. Нет данных времени проектирования в библиотеке классов.

2 ответа

Решение

Пытаться

d:DataContext="{d:DesignInstance dd:DesignViewModel, IsDesignTimeCreatable=True}

Здесь есть блог, который тоже может вам помочь.

Мне было очень неприятно создавать пустой конструктор для моих view-моделей или постоянно создавать производные классы, просто чтобы порадовать дизайнера WPF.

Одно решение, которое работает для меня (протестировано только с Visual Studio 2013), заключается в использовании статического свойства для предоставления экземпляра модели представления времени разработки, например

Код C#

namespace WpfApplication2
{
    public class Person
    {
        public Person(string id)
        {
            Id = id;
        }

        public string Id { get; private set; }
    }

    public static class DesignViewModels
    {
        public static Person Person
        {
            get { return new Person("Design time person id"); }
        }
    }
}

и XAML

<Window x:Class="WpfApplication2.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                xmlns:my="clr-namespace:WpfApplication2"
                mc:Ignorable="d"
                Title="MainWindow" Height="350" Width="525">
    <d:DesignProperties.DataContext>
        <x:Static Member="my:DesignViewModels.Person" />
    </d:DesignProperties.DataContext>
    <TextBlock Text="{Binding Id}"/>
</Window>
Другие вопросы по тегам