如何注册接收Mvvm-Light中的所有属性更改

tig*_*tig 2 silverlight windows-phone-7 mvvm-light

我想在我的Mvvm-Light解决方案(WP7)中使用一个类(称为PremiseServer)来订阅从基类型派生的类的所有属性更改(SysObject是基类,它派生自ViewModel).

我有一组派生自SysObject的类.这些类具有不同类型的各种属性(字符串,布尔值,整数等...).

当任何这些类上的任何属性发生更改时,我希望我的PremiseServer实例看到这些更改,然后进行Web服务调用以将数据推送到服务器.

我已经尝试了这个,它永远不会被调用(这对我来说很有意义;因为正在改变的属性不是SysObject,而是SysObject的一些属性):

Messenger.Default.Register<PropertyChangedMessage<SysObject>>(this, (action) => {
    String location = ((SysObject)action.Sender).Location;  // URL to POST to
    Debug.WriteLine("PremiseServer PropertyChange - " + action.NewValue.ToString());
});
Run Code Online (Sandbox Code Playgroud)

我也尝试了下面的(注册字符串消息),它可以工作,但我不想为每种属性类型创建其中一个:

Messenger.Default.Register<PropertyChangedMessage<String>>(this, (action) => {
    String location = ((SysObject)action.Sender).Location;  // URL to POST to
    Debug.WriteLine("PremiseServer PropertyChange - " + action.NewValue.ToString());
});
Run Code Online (Sandbox Code Playgroud)

我也试过Register<PropertyChangeMessage<Object>想我会看到所有派生类型的消息(我没有).

我真正想要的是"从SysObject类的对象的任何属性注册所有属性更改密码".我怎样才能做到这一点?

谢谢!

LBu*_*ion 5

您可以使用PropertyChangedMessageBase具有布尔标志作为最后一个参数的注册方法重载,并且这个标志设置为true注册.与其名称一样,此标志允许您注册消息类型或从此类型派生的所有消息.

请注意,在处理程序中,您需要将消息强制转换为要处理的确切类型.

是否有意义?干杯,洛朗