POCO и несколько ViewModel, указывающих на один и тот же POCO? - PullRequest
1 голос
/ 03 ноября 2011

Как можно поступить с такой ситуацией?Наличие нескольких ViewModel, имеющих ссылку на один и тот же объект POCO.ViewModel A обновляет POCO ... теперь ViewModel B нужно как-то об этом знать?

1 Ответ

2 голосов
/ 03 ноября 2011

Предполагая, что ваш POCO не может реализовать INotifyPropertyChanged, вы можете использовать шаблон mediator для оповещения других моделей представления об изменении POCO:

public interface ICareWhenAModelChanges<T>
{
    void ModelUpdated(T updatedModel);
}

public class ModelChangeMediator<T>
{
    private List<ICareWhenAModelChanges<T>> _listeners = new List<ICareWhenAModelChanges<T>>();

    public void Register(ICareWhenAModelChanges<T> listener)
    {
        _listeners.Add(listener);
    }

    public void NotifyThatModelIsUpdated(T updatedModel)
    {
        foreach (var listener in _listeners) listener.ModelUpdated(updatedModel);
    }
}

Ваша модель представления может затем реализовать интерфейс ICareWhenAModelChanges<T>, зарегистрировать себя в совместно используемом экземпляре посредника (полученном с помощью одноэлементной или, что лучше, некоторой структуры DI / IoC) и делать все, что нужно в ModelUpdated метод

...