我有一个项目,可以从许多演示者中的一个改变模型。如何确保通知视图有任何更改?
通常的通知来自后面的代码(或Presenter,如果使用Caliburn),但如果模型已从其他来源更改,我如何正确通知视图的更改?
答案 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)
我认为视图绑定到模型,因此绑定会处理这个问题。我错过了什么吗?