Je dois stocker un modèle pour chaque MailItem utilisé. Pour cela j'ai écrit la méthode suivanteIdentification unique Mailitem
private readonly static Dictionary<string, PermitCustomPaneViewmodel> ViewmodelLookup = new Dictionary<string, PermitCustomPaneViewmodel>();
public static PermitCustomPaneViewmodel CreateOrGet(MailItem c)
{
if (c.EntryID == null)
c.Save();
if (!ViewmodelLookup.ContainsKey(c.EntryID))
{
var vm = new PermitCustomPaneViewmodel(c);
c.Unload +=() => ViewmodelLookup.Remove(c.EntryID);
ViewmodelLookup.Add(c.EntryID, vm);
}
return ViewmodelLookup[c.EntryID];
}
Lorsque le modèle existe déjà, je le recherche et le renvoie. S'il n'a pas été créé, je le crée et supprime l'entrée après que le MailItem sera déchargé.
Cependant, j'ai observé que l'objet MailItem
ne sera pas toujours valide jusqu'à ce que le déchargement soit appelé. Afin de pouvoir identifier le MailItem, j'ai utilisé le EntryID
. Le problème est maintenant que cela ne fonctionne que si l'élément est enregistré.
Donc actuellement j'enregistrer l'article si aucun EntryID
n'a été trouvé. Mais cela enregistre automatiquement l'article en cours de brouillon.
Existe-t-il un moyen de distinguer les MailItem
qui ne sont pas enregistrés de manière à pouvoir être utilisés dans un Dictionary<,>
.
Vous pouvez créer et définir un [UserProperty] (https://www.add-in-express.com/creating-addins-blog/2011/08/19/how-to-add-a-custom-property -to-the-userproperties-collection-of-a-e-mail-item-in-outlook /) pour stocker l'identifiant unique. –
Est-ce que je n'aurai pas besoin d'enregistrer aussi l'élément pour persiter le UserProperty? – lokimidgard
Si l'article de courrier n'est pas stocké et enregistré par l'utilisateur, l'ID reste inutilisé. Mais cela ne devrait pas être un problème. –