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

WinUI3 DatePicker SelectedDate绑定问题:x:Bind与Binding结果差异

WinUI3 DatePicker绑定返回值不一致问题解决

问题现象

使用DatePicker控件时,两种绑定方式对同一可空DateTimeOffset属性的返回结果不一致:

  • 通过{x:Bind vm.MyDate, Mode=TwoWay}绑定SelectedDate时,属性值为null
  • 通过{Binding MyDate}绑定同一属性时,属性值被自动设置为1923-1-1(DatePicker的默认最小日期)

需实现Binding绑定也能返回null值。

原因分析

{Binding}默认会在源值为null时,使用控件的默认值(此处为DatePicker的最小日期1923-1-1)作为回退;而{x:Bind}默认不会自动填充默认值,保持源的null状态。

解决方案

在Binding表达式中添加TargetNullValue={x:Null},明确指定当源值为null时,目标控件也使用null值,避免自动填充默认日期。

修改后的XAML代码

<DatePicker SelectedDate="{x:Bind vm.MyDate, Mode=TwoWay}"/>
<StackPanel DataContext="{x:Bind vm}">
   <DatePicker SelectedDate="{Binding MyDate, Mode=TwoWay, TargetNullValue={x:Null}}"/>
</StackPanel>

C#代码(无需修改)

public class MyTable : ObservableObject
{
    private DateTimeOffset? _mydate;
    public DateTimeOffset? MyDate
    {
        get => _mydate;
        set => SetProperty(ref _mydate, value);
    }
}
public sealed partial class MainWindow : Window
{
    MyTable vm = new MyTable();
    public MainWindow() { this.InitializeComponent(); }
}

效果说明

修改后,两种绑定方式在源值为null时,都会保持SelectedDate为null,不会自动填充1923-1-1的默认日期。

内容的提问来源于stack exchange,提问作者褚振俞

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:54:58