【发布时间】:2015-05-17 12:27:27
【问题描述】:
我正在尝试将 CSLA(最新版本)与 ReactiveUI/Reactive Extensions 一起使用。
当使用 reactiveUI (Bind/OneWayBind) 并使用 ToProperty 方法创建 WPF 绑定时,底层逻辑似乎使用 Rx Observable.FromEventPattern 挂钩到 CSLA 的 BindableBase 中模型的 PropertyChanged 事件。
正在发生的问题是 CSLA 认为这些处理程序应该是可序列化的。
这是由BindableBase中的代码决定的,
if (value.Method.IsPublic &&
(value.Method.DeclaringType.IsSerializable ||
value.Method.IsStatic))
_serializableChangedHandlers = (PropertyChangedEventHandler)
System.Delegate.Combine(_serializableChangedHandlers, value);
else
_nonSerializableChangedHandlers = (PropertyChangedEventHandler)
System.Delegate.Combine(_nonSerializableChangedHandlers, value);
在这种情况下,方法是在响应式扩展中创建的匿名委托,其中 value.Method 是 public,value.Method.DeclaringType 是 System.Action`2[[System.Object], System.ComponentModel.PropertyChangedEventArgs] ] 其中有 IsSerializable == true
这会将处理程序添加到可序列化列表中。
关于我可以做些什么来让这些处理程序不被添加到可序列化处理程序中的任何建议?
【问题讨论】:
标签: wpf system.reactive reactiveui csla