我找不到任何关于此的真实文档。我猜你知道VS Docs,但它甚至没有触及表面。
由于在绑定中使用了 RecentProjects 属性,因此应该有一个公开此类属性的类型(或 ICustomTypeDescriptor 的实现,请参阅MSDN 杂志)。TeamFoundationClientSupported“属性”上还有一个绑定。
我在 Microsoft.VisualStudio.Shell.UI.Internal 的一个名为 Microsoft.VisualStudio.PlatformUI.StartPageDataSource 的类中找到了一个名为 TeamFoundationClientSupported 的属性,但它是私有的,因此不能按原样在绑定中使用。这个类的构造函数包含很多这样的行:
base.AddBuiltInProperty(StartPageDataSourceSchema.CustomizationEnabledName, GetUserSetting(StartPageDataSourceSchema.CustomizationEnabledName, false));
...
base.AddBuiltInProperty(StartPageDataSourceSchema.TeamFoundationClientSupportedName, this.TeamFoundationClientSupported);
...
base.AddBuiltInProperty(StartPageDataSourceSchema.RecentProjectsDataSourceName, source3);
...
最后两个很有趣:他们“添加了一个名为 TeamFoundationClientSupported 和 RecentProjects 的内置属性”......
查看此方法的实现会显示一个简单的字典,其中的键基于属性名称(第一个参数),值是第二个参数。此字典由 Microsoft.Internal.VisualStudio.PlatformUI.UIDataSource 中称为 EnumProperties 的方法使用。通过使用链,我们到达了一个名为 Microsoft.Internal.VisualStudio.PlatformUI.DataSource 的类(在 Microsoft.VisualStudio.Shell.10.0 中),它实现了 ICustomTypeDescriptor。因此,它解释了绑定系统如何找到属性。我还没有发现DataSource类型描述符是如何链接到StartPageDataSource类的,但至少我们可以知道StartPageDataSource构造函数中支持的属性列表。