Microsoft.Office.Interop.Word 收听已保存的 属性

Microsoft.Office.Interop.Word Listen on the Saved Property

我一直在寻找一种解决方案,以便在文档变成 (未保存)

时引起注意

我知道在 word 文档中有一个 属性 Saved,但我的问题是当布尔值变为 false 时我需要得到通知。我一直在寻找一个没有成功的事件。

我尝试过的事件:

DocumentChange // this event fired when the a new document is open
WindowSelectionChange // this event fired when the carriage move but not when the document text change 

我查看了 Microsoft.Interop 活动页面,但其中 none 似乎适合我的情况。

我没办法了。

上下文:

我创建了一个上传文档的 WPF 应用程序。在这个应用程序中,我有一个上传 button。当文档的 Saved 属性 为真时,此按钮将被禁用,而当此标志变为假时,我想禁用它。但是这个属性改的时候就没有hook了...

我不知道有什么方法可以做你想做的事 - 没有特定的事件,所以我唯一能想到的就是在每次选择更改时检查(虽然这会在有没有变化,当有变化时它也会触发)。

另一种解决方案:您的 WPF 按钮可能绑定到具有 bool CanExecute() 方法的 ICommand。如果命令的 CanExecuteChanged 事件链接到框架的 CommandManager.RequerySuggested 事件,那么按钮应该在各种事件上更新(焦点变化等 - 只要框架认为状态可能已经改变。它会触发很多!)

public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }     
}

这通常是各种 MVVM 框架的 RelayCommand / DelegateCommand 实现处理此问题的方式。

尝试使用应用程序 class 的 DocumentBeforeSave 方法。它在保存任何打开的文档之前触发。

您也可以考虑使用计时器对象定期检查保存的 属性 值。请注意,您需要在主线程上访问 Word 对象模型以避免出现问题,因为 Office 应用程序使用单线程单元模型。