2009-12-11 4 views
0

Je crée une application air qui permet à l'utilisateur de créer, modifier et enregistrer des objets dans des fichiers. J'essaie d'implémenter une invite "Enregistrer à la fermeture" si l'utilisateur n'a pas enregistré ses modifications à l'objet avant la fermeture. Disons que j'ai une classe appelée MaClasse marquée comme Bindable qui est composée de champs, exposant chacun un getter et un setter. Certains de ces champs sont des ArrayCollections de Classes personnalisées. Je veux considérer un changement une modification à l'un des champs, ou l'un des champs dans l'un des objets dans l'une des collections de tableaux dont l'objet parent est composé.Meilleure façon de savoir si un objet a été modifié depuis sa sauvegarde?

Je peux distribuer un événement manuellement à chaque fois qu'un setter est appelé sur l'objet MyClass et le gérer manuellement, mais je dois également le faire dans un certain nombre d'endroits de la logique de l'application, par exemple lorsque l'utilisateur change l'un des objets personnalisés dans l'une des collections de tableaux qui le comprend. C'est une bonne solution, mais un peu sale et difficile à maintenir. Je pourrais aussi vérifier l'objet actuel par rapport à une copie que j'ai faite au moment du démarrage ou de la dernière sauvegarde, mais je n'aime pas l'idée de doubler mon empreinte mémoire juste pour cela. J'espérais qu'il y avait un événement, peut-être un événement que la liaison diffuse, que je pourrais écouter en un seul endroit et gérer ma variable "Saved". Est-ce qu'une telle chose existe? J'ai essayé d'écouter l'événement dataChange que la liaison envoie apparemment, mais je l'ai soit mal fait, soit il ne fait pas ce que je pense qu'il devrait faire. Y a-t-il une meilleure option?

Merci

Répondre

1

Créer un hash pour votre objet qui sont sauvés et puis comparer le hachage enregistré sur le hachage l'objet actuellement manipulé. Si cela diffère, vos objets sont différents. Cela nécessite bien sûr un hachage décent avec un nombre de collisions suffisamment faible, mais il existe de nombreuses fonctions de hachage disponibles en ligne à votre disposition. Il existe l'événement "propertyChanged" que vous pouvez utiliser pour les propriétés bindable, mais il est au mieux fragile car il s'applique uniquement aux propriétés pouvant être liées et uniquement aux propriétés pouvant être liées qui n'ont pas d'autre événement de liaison spécifié. De plus, vous n'avez vraiment besoin de calculer le hash que deux fois (à la sauvegarde et à la sortie pour la comparaison) alors que l'utilisation d'événements serait nettement plus inefficace.

+0

Bonne idée. Merci! – justin

1

Je ne sais pas si this pourrait être lié, mais vous pouvez toujours jeter un oeil

Questions connexes