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

.NET Maui中DatePicker绑定值无法更新问题求助

解决.NET Maui中DatePicker绑定后不更新UI的问题

你的问题核心在于CustomerLicensesReturn类的属性没有触发数据变更通知:虽然它继承了ObservableObject,但所有属性都是自动属性,值变化时不会发送PropertyChanged事件,导致UI控件(DatePicker)无法感知数据更新。

下面是两种可行的解决方案:

方案1:使用[ObservableProperty]特性(推荐)

既然你已经在ViewModel中使用了CommunityToolkit.Mvvm的工具链,直接给CustomerLicensesReturn的字段加上[ObservableProperty]特性即可,工具包会自动生成带变更通知的公共属性:

namespace DataModels
{
    public partial class CustomerLicensesReturn : ObservableObject
    {
        [ObservableProperty]
        int? licenseID;

        [ObservableProperty]
        int? customerID;

        [ObservableProperty]
        DateTime? validUntil;

        [ObservableProperty]
        string? applicationName;

        [ObservableProperty]
        bool? isValid;
    }
}

注意:特性会自动生成首字母大写的公共属性(比如_validUntil对应ValidUntil),需要同步修改XAML的绑定路径:

<DatePicker Date="{Binding Customer.ValidUntil}"/>

同时调整AddYear方法的属性调用:

[RelayCommand]
void AddYear()
{
    if (Customer.ValidUntil.HasValue)
    {
        Customer.ValidUntil = Customer.ValidUntil.Value.AddMonths(12);
    }
}

方案2:手动实现带通知的属性

如果不想用特性,也可以手动重写属性,调用SetProperty方法触发变更通知:

namespace DataModels
{
    public class CustomerLicensesReturn : ObservableObject
    {
        private int? _licenseID;
        public int? licenseID
        {
            get => _licenseID;
            set => SetProperty(ref _licenseID, value);
        }

        private int? _customerID;
        public int? CustomerID
        {
            get => _customerID;
            set => SetProperty(ref _customerID, value);
        }

        private DateTime? _validUntil;
        public DateTime? validUntil
        {
            get => _validUntil;
            set => SetProperty(ref _validUntil, value);
        }

        private string? _applicationName;
        public string? ApplicationName
        {
            get => _applicationName;
            set => SetProperty(ref _applicationName, value);
        }

        private bool? _isValid;
        public bool? IsValid
        {
            get => _isValid;
            set => SetProperty(ref _isValid, value);
        }
    }
}

这种方式不需要修改XAML和AddYear方法的代码,属性名保持和原代码一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:56:04