You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms DateTimePicker绑定DateTime属性抛出ArgumentException异常

故障原因

WinForms 数据绑定的核心规则是:仅支持绑定数据源的公共实例属性,不支持绑定公共字段。
你代码中myClass定义的myDate是公共字段,而非属性,这就是抛出System.ArgumentException提示无法绑定到myDate成员的直接原因。
你提到同一窗体的文本框用相同绑定写法可正常运行,本质是那些文本框绑定的数据源成员都是公共属性,和控件类型无关;你测试的绑定myObj.myDate的Date成员不抛异常,也是因为Date是DateTime类型的公共属性,只是该属性无set访问器,仅支持单向绑定,无法满足双向编辑需求。

修复方法

无需修改控件侧的绑定代码,仅需要把myClass中的公共字段改写为公共属性即可:

public class myClass : myOtherClass
{
    // 将原公共字段改为自动实现的公共属性
    public DateTime myDate { get; set; }
    // 其余类成员保持不变
    
    public myClass()
    {
        // 原有初始化逻辑不变
        myDate = DateTime.Today;
    }
}

修改后重新运行即可实现DateTimePicker和myDate属性的双向绑定。

可选优化:实现属性变更自动同步

如果需要后续在业务逻辑中修改myDate值时,DateTimePicker能自动刷新显示最新值,可以让myClass实现INotifyPropertyChanged接口,在属性值变更时主动发出通知:

using System.ComponentModel;
using System.Runtime.CompilerServices;

public class myClass : myOtherClass, INotifyPropertyChanged
{
    private DateTime _myDate;
    public DateTime myDate
    {
        get => _myDate;
        set
        {
            if (_myDate == value) return;
            _myDate = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public myClass()
    {
        myDate = DateTime.Today;
        // 其余初始化逻辑保持不变
    }
}

内容的提问来源于stack exchange,提问作者PGmath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:36:23