使用Fody自动绑定到Catel中的某些服务属性

时间:2018-06-28 17:08:02

标签: catel fody fody-propertychanged

假设有一些服务:

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

1 个答案:

答案 0 :(得分:1)

在大多数方法中,服务不实现INotifyPropertyChanged(它们不是模型),所以我的建议是添加手动事件:

public interface IDeviceManagerService
{
    ISomeDeviceApi Api { get; }

    event EventHandler<DeviceApiEventArgs> ApiChanged;
}

通过这种方式,您可以处理感兴趣的内容(在InitializeAsync中订阅,在CloseAsync中取消订阅)。