请考虑以下场景:
WPF 视图:
d:DataContext="{d:DesignInstance vm:DesignViewModel, IsDesignTimeCreatable=True}"
ViewModel 位于一个单独的 c# 项目中:
internal class DesignViewModel : ViewModel
{ /* create demo data in ctor */ }
ViewModel 在 AssemblyInformation 中有以下条目:
[assembly: InternalsVisibleTo("WPF.Demo.View")]
XAML 设计器中的错误消息:
- 命名空间"WPF.演示视图"。
观察:
- 如果我将设计视图模型公开而不是内部,一切正常。但是,我想把它保留在内部,因为外部消费者真的不应该为设计时的事情而烦恼。
- 如果我将 DesignViewModel 移动到保存视图的同一程序集中,一切正常。但是,我想将视图和视图模型分开。
- InternalsVisibleTo 设置正确,因为我可以从视图中的代码隐藏访问它。
问:如何将 d:DataContext 设置为另一个程序集的内部类?
你不能。根据定义,将项目标记为内部项目时,将使其对其他程序集不可见。
或者,可以在公共对象上公开一个方法,该方法在程序集的对象中生成所需的内容。
问候