Я использую LLBL Gen pro для ORM, так что в объекты встроено хорошее отслеживание сущностей.
Я как бы катал свою собственную, которая, кажется, работает довольно хорошо.
Я создал новый интерфейс, который реализуют мои базовые пользовательские элементы управления и базовые формы:
public interface IClosingNotification
{
/// <summary>
/// True if there is a dirty entity (or a dirty entity in the collection) present
/// </summary>
bool DirtyEntityPresent { get; }
/// <summary>
/// Register an entity to be watched for changes
/// </summary>
/// <param name="entity"></param>
void RegisterForClosingNotification(IEntity entity);
/// <summary>
/// Register a collection to be watched for changes
/// </summary>
/// <param name="collection"></param>
void RegisterForClosingNotification(IEntityCollection collection);
/// <summary>
/// Returns true if the form should close without any notification
/// </summary>
/// <returns></returns>
bool ShouldClose();
}
В моем базовом элементе управления / форме у меня есть коллекция сущностей, которые я наблюдаю в каждой форме, и у меня есть метод CloseForm () в этих классах, который я использую при закрытии формы.
В моих формах всякий раз, когда я создаю объект, я могу зарегистрировать его для закрытия уведомления, используя:
RegisterForClosingNotification (MyCustomer);
Это хорошо работает в нашем сценарии.