我有一个WCF服务,它通过一个结构传递状态更新,如下所示:
[DataContract]
public struct StatusInfo
{
[DataMember] public int Total;
[DataMember] public string Authority;
}
...
public StatusInfo GetStatus() { ... }
我在ViewModel中公开一个属性,如下所示:
public class ServiceViewModel : ViewModel
{
public StatusInfo CurrentStatus
{
get{ return _currentStatus; }
set
{
_currentStatus = value;
OnPropertyChanged( () => CurrentStatus );
}
}
}
XAML如下所示:
<TextBox Text="{Binding CurrentStatus.Total}" />
当我运行应用程序时,我在输出窗口中看到错误,指示找不到Total属性。我检查了一遍又一遍,而且我输入的是正确的。我突然想到,这些错误明确表示找不到'property‘。因此,在结构中添加一个属性可以让它工作得很好。但这对我来说似乎很奇怪,因为WPF不能处理字段的单向绑定。从语法上讲,您可以在代码中以相同的方式访问它们,而且只为StatusInfo结构创建自定义视图模型似乎很愚蠢。我是不是错过了一些关于WPF绑定的东西?你能绑定到一个字段,还是属性绑定是唯一的方法?
发布于 2009-05-16 15:51:47
我只能猜测为什么它们只支持属性:可能是因为永远不公开可变字段(probably to safeguard binary compatibility)似乎是.NET框架中的通用约定,而且它们不知何故希望所有程序员都遵循相同的约定。
此外,尽管字段和属性使用相同的语法进行访问,但数据绑定使用反射,并且(我听说)访问字段和访问属性时使用反射的方式必须不同。
https://stackoverflow.com/questions/842575
复制相似问题