Установите d:DataContext для внутреннего класса другой сборки

Рассмотрим следующий сценарий:

WPF view:

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

ViewModel находится в отдельном проекте C#:

internal class DesignViewModel : ViewModel 
{ /* create demo data in ctor */ }

ViewModel имеет эту запись в AssemblyInfo:

[assembly: InternalsVisibleTo("WPF.Demo.View")]

Сообщение об ошибке в XAML Designer:

  • Имя "DesignViewModel" не существует в пространстве имен "WPF.Demo.View".

Замечания:

  • Все работает нормально, если я сделаю DesignViewModel общедоступным, а не внутренним. Но я бы хотел, чтобы это было внутренним, поскольку внешние потребители действительно не должны беспокоиться о времени разработки.
  • Все работает нормально, если я перемещаю DesignViewModel в ту же сборку, которая содержит представление. Но я бы хотел разделить view и ViewModel.
  • InternalsVisibleTo установлен правильно, потому что я могу получить к нему доступ из кода в представлении.

Вопрос: Как я могу установить d: DataContext для внутреннего класса другой сборки?

1 ответ

Ты не можешь По определению, когда вы помечаете артефакт как внутренний, вы делаете его невидимым для других сборок.

В качестве альтернативы, вы можете предоставить метод для открытого объекта, который делает то, что вы хотите в объектах сборки.

С Уважением,

Другие вопросы по тегам