Предполагая, что есть какой-то сервис:
public interface IDeviceManagerService
{
ISomeDeviceApi Api { get; }
}
Его целью является мониторинг внешней среды (USB, сеть и т. д.), создание экземпляра API устройства при обнаружении устройства и создание свойства null
, когда устройство больше недоступно.
Предположим, что существует модель просмотра с этой внедренной службой, я хотел бы иметь уведомления об изменениях для IDeviceManagerService.Api
, чтобы сделать возможными такие вещи, как показано ниже (например, наличие кнопки, которая активна только тогда, когда доступен API устройства ).
private Boolean OnSomeCommandCanExecute()
{
return _deviceManagerService.Api != null;
}
Интересно, есть ли чистый способ заставить это работать без ручной обработки уведомлений об изменениях (с помощью Catel.Fody или PropertyChanged.Fody). До сих пор мне удавалось получить рабочий результат, сделав реализацию службы производной от ModelBase
, зарегистрировав внедренный экземпляр как [Model]
внутри модели представления и выставив его свойство Api
с использованием атрибута [ViewModelToModel]
, но это очень грязный способ.
Есть ли какой-то общий подход или было бы лучше реализовать INotifyPropertyChanged и использовать уведомления обертка?