Установите d: DataContext для внутреннего класса другой сборки - PullRequest
0 голосов
/ 14 января 2019

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

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 Ответ

0 голосов
/ 14 января 2019

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

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

С уважением,

...