我正在使用C#开发一个独立的Outlook WPF应用程序。我想要做的是让程序监视任何传入邮件的公共文件夹,并通知用户任何邮件到达。
我已经成功地做到了这一点,但我觉得我这样做的方式就是kludgey。基本上我正在构建一个MailItems集合,我的程序通过Timer重新扫描公共文件夹中的任何新邮件。
我想知道的是,有没有办法将集合直接绑定到MAPIFolder或MAPIFolder.Items。我实际上已经能够将Listbox.ItemsSource设置为Outlook.Items对象,但它只显示(SysCom.Object)作为列表框项。所以我觉得这是可能的,但是我需要一些方法来告诉Listbox只显示MailItems(以及Mailitem的Subject字段的相应绑定路径)。
我想我最终要做的是“镜像”Outlook文件夹,而不是将项目复制到其他列表对象中。
答案 0 :(得分:2)
无法以与绑定到recorset相同的方式进行绑定,但您需要做的是监视该文件夹上的事件(Items.ItemAdd / ItemChange / ItemRemove)。
此外,不要加载文件夹中的所有项目 - 除了极其低效之外,您还可以用尽RPC通道限制(由Exchange强制执行)。仅加载足够的项目以显示给最终用户。当用户滚动时,需要加载其他项目。
在低级别,Outlook使用不需要将每个项目作为单独对象打开的MAPI表。扩展MAPI不能用于.Net语言,但您可以在Redemption(http://www.dimastr.com/redemption/mapitable.htm)中使用MAPITable对象,也可以在Outlook 2007及更高版本中使用Table对象(http://msdn.microsoft.com/en-us/library/office/bb176406(v=office.12).aspx)。