假设有一些服务:
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]
并使用{{1}公开它的Api
属性来获得工作结果}属性,但这是非常肮脏的方式。
是否有一些通用方法?还是最好实现INotifyPropertyChanged并改用通知wrapper?
答案 0 :(得分:1)
在大多数方法中,服务不实现INotifyPropertyChanged(它们不是模型),所以我的建议是添加手动事件:
public interface IDeviceManagerService
{
ISomeDeviceApi Api { get; }
event EventHandler<DeviceApiEventArgs> ApiChanged;
}
通过这种方式,您可以处理感兴趣的内容(在InitializeAsync中订阅,在CloseAsync中取消订阅)。