POCO和多个ViewModel指向同一个POCO?

时间:2011-11-03 13:16:30

标签: c# mvvm poco inotifypropertychanged

如何处理这样的情况?有多个ViewModel具有对同一POCO对象的引用。 ViewModel A更新了POCO ......现在ViewModel B需要以某种方式了解它?

1 个答案:

答案 0 :(得分:2)

假设您的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方法