如果许多演示者可以更改模型,如何通知模型中的更改视图?

时间:2009-09-19 20:28:56

标签: wpf

我有一个项目,可以从许多演示者中的一个改变模型。如何确保通知视图有任何更改?

通常的通知来自后面的代码(或Presenter,如果使用Caliburn),但如果模型已从其他来源更改,我如何正确通知视图的更改?

2 个答案:

答案 0 :(得分:3)

模型需要支持变更通知,或者您需要“单点事实”,例如服务,其本身具有变更通知。然后,您的视图模型将附加到此更改通知,并确保将更改传递到视图。

简化示例:

public interface IDataService
{
    ICollection<Customer> Customers
    {
        get;
    }

    void AddCustomer(Customer customer);

    void DeleteCustomer(Customer customer);

    event EventHandler<EventArgs> CustomersChanged;
}

public class SomeViewModel : ViewModel
{
    public SomeViewModel(IDataService dataService)
    {
        _dataService.CustomersChanged += delegate
        {
            UpdateCustomerViewModels();
        };

        UpdateCustomerViewModels();
    }

    public ICollection<CustomerViewModel> Customers
    {
        get { ... }
    }

    private void UpdateCustomerViewModels()
    {
        ...
        OnPropertyChanged("Customers");
    }
}

现在,只要您的所有视图模型都使用此服务,您就可以让他们使用服务上的事件来检测他们感兴趣的更改。当然,根据您的具体要求,您可能会能够减少检测到更改时的工作量。

答案 1 :(得分:0)

我认为视图绑定到模型,因此绑定会处理这个问题。我错过了什么吗?