Что заставляет дизайнера 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>