我正在编写一个类,根据其可访问性为属性生成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;
}
Run Code Online (Sandbox Code Playgroud)
但是,这没有按预期工作.CanWrite是true什么时候它应该是假的.例如,对于此属性:
abstract class AbstractViewModel {
public virtual string DisplayName { get; protected set; }
}
class ListViewModel : AbstractViewModel {
//does not override DisplayName
}
Run Code Online (Sandbox Code Playgroud)
我发现DisplayNamea 的属性ListViewModel是CanRead和CanWrite.但是,如果我打电话prop.GetAccessors(),则只get_DisplayName()列出访问者.
这里发生了什么?如果不是财产的保护等级,做什么CanRead和CanWrite表明什么?什么是我的方法的正确实现?
svi*_*ick 13
CanRead和CanWrite表示什么?
如果您有类似的问题,请先查看文档.
如果该属性没有
get访问者,则无法读取.
如果该属性没有
set访问者,则无法写入.
因此,属性说明是否存在get和set访问,他们的保护水平今非昔比.其中一个原因是Reflection不知道你从哪里调用它,所以它不知道你是否可以实际访问访问器.
你可以做的是找出你是否可以访问访问者是要打电话GetGetMethod()和GetSetMethod().如果该物业没有公共get/ set访问者,他们将返回null.
| 归档时间: |
|
| 查看次数: |
2927 次 |
| 最近记录: |