为什么WPF支持绑定到对象的属性,而不支持字段?

为什么WPF支持绑定到对象的属性,而不支持字段?

我有一个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属性。我又查,打字正确。我突然意识到,这些错误明确表示找不到“属性”。因此,向结构中添加一个属性使其工作得很好。但这在我看来很奇怪,WPF无法处理单向绑定到字段。从语法上讲,您在代码中访问它们的方式是相同的,只为StatusInfo结构创建一个自定义视图模型似乎很愚蠢。我错过了关于WPF绑定的东西吗?您可以绑定到某个字段,还是属性绑定是唯一的方式?


白衣染霜花
浏览 1172回答 2
2回答

慕桂英4014372

我只能猜测它们为什么只支持属性:也许是因为在.NET框架中,永远不公开可变字段似乎是一种通用的约定(可能是为了维护二进制兼容性在某种程度上,他们希望所有的程序员都遵循同样的惯例。此外,虽然使用相同的语法访问字段和属性,但数据绑定使用反射和反射(我听说过)必须以不同的方式访问字段,而不是访问属性。
打开App,查看更多内容
随时随地看视频慕课网APP