Как сообщить Представлениям об изменениях из Модели, если Модель может быть изменена многими Докладчиками? - PullRequest
0 голосов
/ 20 сентября 2009

У меня есть проект, в котором модель может быть изменена одним из многих докладчиков. Как я могу убедиться, что представления уведомляются о любых изменениях?

Обычное уведомление приходит от кода (или Presenter, если используется Caliburn), но если Модель была изменена из другого источника, как я могу надлежащим образом проинформировать Представления об изменении?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2009

Либо модель должна поддерживать уведомление об изменениях, либо вам нужна «единая точка правды», такая как служба, которая сама имеет уведомление об изменении. Затем ваши модели представлений присоединятся к этому уведомлению об изменениях и обеспечат передачу изменений в представление.

Упрощенный пример:

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");
    }
}

Теперь, пока все ваши модели представлений используют этот сервис, вы можете позволить им использовать события в сервисе для обнаружения изменений, в которых они заинтересованы. Конечно, в зависимости от ваших конкретных требований, вы можете возможность сократить объем работы, выполняемой при обнаружении изменений.

0 голосов
/ 20 сентября 2009

Я бы предположил, что представление привязано к модели, и поэтому привязки позаботятся об этом. Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...