我希望 Mvvm-Light 解决方案 (WP7) 中的一个类(称为 PremiseServer)订阅从基类型派生的类的所有属性更改(SysObject 是基类,它派生自 ViewModel)。
我有一组从 SysObject 派生的类。这些类具有不同类型的各种属性(字符串、 bool 值、整数等...)。
当这些类中的任何属性发生更改时,我希望我的 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());
});
我还尝试了以下方法(注册字符串消息)并且它有效,但我不想为每种属性类型创建其中一个:
Messenger.Default.Register<PropertyChangedMessage<String>>(this, (action) => {
String location = ((SysObject)action.Sender).Location; // URL to POST to
Debug.WriteLine("PremiseServer PropertyChange - " + action.NewValue.ToString());
});
我也尝试过Register<PropertyChangeMessage<Object>
我认为我会看到所有派生类型的消息(我没有)。
我真正想要的是“注册来自 SysObject 类对象的任何属性的所有属性更改消息”。我怎样才能做到这一点?
谢谢!
最佳答案
您可以使用带有 bool 标志作为最后一个参数的 Register 方法重载来注册 PropertyChangedMessageBase,并将该标志设置为 true。正如其名称所示,此标志允许您注册消息类型或从此类型派生的所有消息。
请注意,在处理程序中,您需要将消息转换为您想要处理的确切类型。
有道理吗? 干杯, 洛朗
关于silverlight - 如何注册以接收 Mvvm-Light 中的所有属性更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683310/