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

时间:2015-04-24 14:24:26

标签: c# .net ms-word ms-office office-interop

当文档变为(未保存)

时,我一直在寻找解决方案以引起注意

我知道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事件页面,但似乎没有一个适合我的情况。

我没有解决方案。

上下文

我创建了一个上传文档的WPF应用程序。在此应用程序中,我上传了button。当文档的Saved属性为true时,此按钮被禁用,而当此标志变为false时我想要无法使用此按钮。但是当这个属性改变时没有钩子......

2 个答案:

答案 0 :(得分:0)

我不知道你有什么办法可以做你想要的 - 没有具体的事件,所以我唯一能想到的就是每次选择改变时都要检查(尽管如此当没有变化时发射,当发生变化时它也会发射)。

另一种解决方案是:您的WPF按钮可能绑定到ICommand,其bool CanExecute()方法。如果命令的CanExecuteChanged事件链接到框架的CommandManager.RequerySuggested事件,那么按钮应该更新各种事件(焦点更改等 - 每当框架认为状态可能已更改时它爆发了很多!)

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

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

答案 1 :(得分:0)

尝试使用Application类的DocumentBeforeSave方法。在保存任何打开的文档之前触发它。

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