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,提问作者褚振俞
相关产品推荐
相关产品推荐

