C# Word加载项中的绑定用法

C# Word加载项中的绑定用法,c#,binding,office-js,word-addins,C#,Binding,Office Js,Word Addins,我想使用Office插件技术为Word文档提供模型视图控制器逻辑 在我的场景中,用户应该能够创建一个新的Word文档,激活外接程序,并按下外接程序内的按钮将文本框字段添加到文档中。该字段应显示来自数据库的数字:当用户更新该数字并按save时,该数字应写回数据库。下次打开Word文档时,应刷新该数字,以便显示更新的值 我想知道的是,是否可以使用插件技术(可能有绑定支持?),或者它仍处于实验阶段。我很难理解构建简单表示文本框的紧凑OOXML的最佳方法:getSelectedDataAsync方法输出

我想使用Office插件技术为Word文档提供模型视图控制器逻辑

在我的场景中,用户应该能够创建一个新的Word文档,激活外接程序,并按下外接程序内的按钮将文本框字段添加到文档中。该字段应显示来自数据库的数字:当用户更新该数字并按save时,该数字应写回数据库。下次打开Word文档时,应刷新该数字,以便显示更新的值


我想知道的是,是否可以使用插件技术(可能有绑定支持?),或者它仍处于实验阶段。我很难理解构建简单表示文本框的紧凑OOXML的最佳方法:getSelectedDataAsync方法输出一个非常复杂的文档,描述一个简单的文本框字段再聪明不过了!以及如何将绑定设置为自定义XML?XML应该放在哪里?在文件里面?我查看了Microsoft在GitHub上提供的示例,但它们不太清楚,因为在许多情况下,它们基于现有的Word文档,这些文档已经有了必要的数据和字段。

肯定!您描述的场景实际上是该平台最初设计用于的关键外接程序类型之一。关键元素是一个JavaScript对象,我们称之为“绑定”,它跟踪文档中的内容控件,不需要OXML或自定义XML

API能够直接添加内容控件(类似于文本框):调用该方法

函数addNewField(fieldName){
Office.context.document.bindings.addFromSelectionAsync(“文本”,
{id:fieldName},
函数(异步结果){
displayNumberFromDatabase(asyncResult.value);
}
}
这样,当用户选择或修改这些内容控件内的文本时,您将收到通知。本例中的相关事件分别为和

Office.context.document.addHandlerAsync(“bindingDataChanged”,whenBindingDataChanged);
Office.context.document.addHandlerAsync(“bindingSelectionChanged”,当绑定被选中时);
当触发这些事件时,您将希望读取内容。您可以使用该方法执行此操作

绑定数据更改时的函数(eventArgs){ eventArgs.binding.getDataAsync(函数(asyncResult){ setValueToDatabaseAsync(eventArgs.binding.id,asyncResult.value); //您需要实现setValueToDatabaseAsync }); } 最后,要修改绑定的内容以编写初始值,请使用该方法

函数displayNumberFromDatabase(myBinding){
getValueFromDatabaseAsync(myBinding.id,函数(值){
myBinding.setDataAsync(值);
});
//您需要实现getValueFromDatabaseAsync
}

-Michael Saunders,Office插件项目经理

你好,珍妮,我对你的案例有几个问题,以便为你提供更好的指导。a)你需要文本字段还是只需插入内容控件即可?B) 关于字段的更新,只要外接程序处于活动状态,您就可以更新字段。我们不支持(截至2016年8月)任何保存或打开文档的事件,您可以通过在加载项上显示按钮来更新后端,或者如果控件的内容发生更改,则可以更新后端。请提供更多详情。谢谢Juan Balmori PM for Word.jsHi Juan,我错误地称它为“文本框”:一个“内容控制”就好了。那么,您是说,当单击预定义的保存按钮时,没有一种干净的方式来获得通知?我必须在外接程序上添加一个自定义保存,因为每当内容发生更改时更新后端不是一个选项,它会经常发生。谢谢你的回复!实际上,现在保存文档时没有事件。我不确定这是否是我们想要的,例如,在在线客户端中,我们总是将文档保存在后台。是的,我建议您现在在外接程序上添加一个保存选项。嗨,Michael,多亏了您的提示,我写了一个有效的示例!我不理解如何使用绑定,因为我认为它的工作方式不同:必须编写每个set和get语句,而通常使用绑定将控件绑定到对象,控件反映对象的值,反之亦然。不幸的是,Office online似乎不支持绑定,您对此有何消息?作为第二个选项,我可以添加一个自定义XML部件,并在该部件和我的内容控件之间创建映射:这是一个选项还是一个不推荐的解决方案?取决于您创建的绑定类型,联机支持文本绑定,其他绑定很快就会出现。太好了!现在谢谢你!