我正在编写一个类,该类根据其可访问性为属性生成 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;
}
但是,这并没有按预期工作。CanWrite
是true
什么时候应该是假的。例如,对于这个属性:
abstract class AbstractViewModel {
public virtual string DisplayName { get; protected set; }
}
class ListViewModel : AbstractViewModel {
//does not override DisplayName
}
我发现 a 的DisplayName
属性ListViewModel
是CanRead
and CanWrite
。但是,如果我调用prop.GetAccessors()
,则仅get_DisplayName()
列出访问者。
这里发生了什么?如果不是财产的保护级别,做什么CanRead
和指示?CanWrite
我的方法的正确实现是什么?