为什么我不能绑定到WPF中的类上的字段而不是绑定到属性

看来,在WPF中,我无法绑定到对象上的公共字段,而只能绑定到公共属性。 这是WPF的故意设计决定,还是我只是弄错了语法?

这是一个示例代码段:

public class User { public string Username; public string FullName; public string DisplayName { get { return FullName; } } } 

WPF片段:

         

如果我将绑定路径更改为用户名或FullName,屏幕上不会显示任何内容。 是否有替代语法绑定到字段,或仅绑定属性?

字段不是绑定源规范的一部分

公共语言运行时(CLR)对象

您可以绑定到任何公共语言运行时(CLR)对象的公共属性,子属性以及索引器。 绑定引擎使用CLRreflection来获取属性的值。 或者,实现ICustomTypeDescriptor或具有已注册的TypeDescriptionProvider的对象也可以使用绑定引擎。

有关如何实现可用作绑定源的类的更多信息,请参阅本主题后面的为绑定源实现类。

动态对象

您可以绑定到实现IDynamicMetaObjectProvider接口的对象的可用属性和索引器。 如果您可以在代码中访问该成员,则可以绑定它。 例如,如果动态对象允许您通过someObjet.AProperty访问代码中的成员,则可以通过设置AProperty的绑定路径来绑定它。

ADO.NET对象

您可以绑定到ADO.NET对象,例如DataTable。 ADO.NET DataView实现IBindingList接口,该接口提供绑定引擎侦听的更改通知。

XML对象

您可以在XmlNode,XmlDocument或XmlElement上绑定并运行XPath查询。 访问作为标记中绑定源的XML数据的便捷方法是使用XmlDataProvider对象。 有关更多信息,请参见如何:使用XMLDataProvider和XPath查询绑定到XML数据。

您还可以使用LINQ to XML绑定到XElement或XDocument,或绑定到在这些类型的对象上运行的查询结果。 使用LINQ to XML访问作为标记中绑定源的XML数据的便捷方法是使用ObjectDataProvider对象。 有关更多信息,请参见如何:绑定到XDocument,XElement或LINQ for XML Query Results。

DependencyObject对象

您可以绑定到任何DependencyObject的依赖项属性。 有关示例,请参见如何:绑定两个控件的属性。

它似乎必须是一个财产。

绑定源可以是任何公共属性,包括其他控件的属性,公共语言运行时(CLR)对象,XAML元素,ADO.NET数据集,XML片段等。

资源