我正在编写一个类,根据属性的可访问性生成WPF绑定。以下是关键方法:
static Binding getBinding(PropertyInfo prop)
{
var bn = new Binding(prop.Name);
bn.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
if (prop.CanRead && prop.CanWrite)
bn.Mode = BindingMode.TwoWay;
else if (prop.CanRead)
bn.Mode = BindingMode.OneWay;
else if (prop.CanWrite)
bn.Mode = BindingMode.OneWayToSource;
return bn;
}
然而,这并没有按照预期的方式工作。当它应该为false时,
CanWrite
却是 true
。例如,对于此属性:abstract class AbstractViewModel {
public virtual string DisplayName { get; protected set; }
}
class ListViewModel : AbstractViewModel {
//does not override DisplayName
}
我发现
ListViewModel
的 DisplayName
属性既可以读取也可以写入 (CanRead
和 CanWrite
)。然而,如果我调用 prop.GetAccessors()
,只有 get_DisplayName()
访问器被列出。
这是怎么回事?如果不是属性的保护级别,CanRead
和 CanWrite
表示什么?我的方法应该如何正确实现?
AbstractViewModel
在我的应用程序中实际上是声明为抽象的...我会编辑问题。 - Oliver