Установите 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 ответ
Ты не можешь По определению, когда вы помечаете артефакт как внутренний, вы делаете его невидимым для других сборок.
В качестве альтернативы, вы можете предоставить метод для открытого объекта, который делает то, что вы хотите в объектах сборки.
С Уважением,