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

标签 silverlight windows-phone-7 mvvm-light

我希望 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/

相关文章:

silverlight - 学习 WCF RIA 服务的最佳资源

c# - 对于 WPF 窗口中介服务,使用简单注入(inject)器按键解析实例的替代方法是什么?

.net - Silverlight 对比WPF 对比Winforms 有什么特别适合我的目的?

c# - 如何使用 MVVM 折叠 Silverlight DataGrid 组?

c# - 如何在两个项目共享的 xaml 文件中添加用户控件的引用

c# - 如何使用 MVVM Light 在 WP7 中设置 StackPanel 的可见性?

silverlight - IValueConverter 不适用于 SolidColorBrush

mvvm-light - 使用 RelayCommand 对象有什么好处

wpf - 命名空间中不存在名称 ViewModelLocator

silverlight - Silverlight 4提供哪些线程安全的收集类?