.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
相关产品推荐
相关产品推荐

