有两种保留 属性 窗口与属性值更改同步。 第一种方法是调用 IVsUIShell 接口,提供对基本的多窗口功能,包括工具的访问并创建该环境提供的文档窗口。 以下步骤介绍此同步进程。
更新使用 IVsUIShell 的属性值
使用 IVsUIShell 接口,更新属性值
随时调用 IVsUIShell (通过 SVsUIShell 服务) 该 Vspackage、项目或编辑需要创建或枚举工具或文档窗口。
实现保留 属性 窗口的 RefreshPropertyBrowser 使用特性同步为项目 (或 属性 窗口浏览的其他选定的对象更改),而无需实现 IConnectionPointContainer 和激发 OnChanged 事件。
实现 IVsHierarchy 方法 AdviseHierarchyEvents 和 UnadviseHierarchyEvents 建立和禁用,,层次结构事件的单个客户端通知,而无需该层次结构实现 IConnectionPointContainer。
更新使用 IConnection 的属性值
第二种方法是保留 属性 窗口与属性值更改同步将实现在可连接的对象的 IConnection 指示输出接口的存在。 如果希望本地化属性名称,从 ICustomTypeDescriptor派生对象。 它返回并更改属性的名称 ICustomTypeDescriptor 实现可以修改属性说明符。 若要本地化说明,请创建从 DescriptionAttribute 派生的特性并重写阐释了属性。
在实现 IConnection 接口的注意事项
IConnection 提供对枚举数子对象 IEnumConnectionPoints 接口。 它还提供对所有连接点子对象,每一次哪些 IConnectionPoint 实现接口。
任何浏览对象实现 IPropertyNotifySink 事件负责。 属性 窗口为通过 IConnection此设置将建议。
连接点控件多少连接 (一个或多个) 在其 Advise的实现允许。 只允许一个接口可能返回从 EnumConnections 方法的 E_NOTIMPL 的连接点。
客户端可以调用 IConnection 接口获取对枚举数子对象的访问与 IEnumConnectionPoints 接口。 IEnumConnectionPoints 接口然后可以调用枚举为每个输出接口 ID (IID) 连接点。
IConnection 还可以调用获取若要访问连接点用于 IConnectionPoint 接口的子对象每个传出的 IID。 通过 IConnectionPoint 接口,客户端启动或停止与可连接的对象和客户端自己的同步的一个具有建议性循环。 客户端还可以调用 IConnectionPoint 接口获取一个枚举数对象与 IEnumConnections 接口枚举它知道的连接。