首页 > 解决方案 > 如何在 UWP、C# 中清除日历日期选择器选定的值

问题描述

我有一个数据网格控件和一系列用于过滤该数据网格中数据的控件。

这些控件可以分为如下两个。

现在,我想做一些 UX 工作,如下所示。

我可以管理它适用于要求 2,但 1 进展不顺利。下面是我的事件处理程序。我没有使用 MVVM。只是代码隐藏。

private void SelectionChanged_Filter(object sender, SelectionChangedEventArgs e)
{
    /*DatePicker_FromDate.ClearValue(CalendarDatePicker.DateProperty);
      DatePicker_FromDate.PlaceholderText = "Pick a Date";
      DatePicker_ToDate.ClearValue(CalendarDatePicker.DateProperty);
      DatePicker_ToDate.PlaceholderText = "Pick a Date";*/

      DatePicker_FromDate.Date = null
      DatePicker_ToDate.Date = null;
}
 private void ButtonClick_Filter(object sender, Windows.UI.Xaml.RoutedEventArgs e)
 {
      // Clear the Filter Combobox's selected value
      ComboBox_Filter.SelectedIndex = -1;

      // EXCEPTION is in the below line:
      var fromDate = Convert.ToDateTime(DatePicker_FromDate.Date.ToString()).ToString("dd-MM-yyyy");
      var toDate = Convert.ToDateTime(DatePicker_ToDate.Date.ToString()).ToString("dd-MM-yyyy");

      //...
}

例外是:

System.FormatException: 'String '' was not recognized as a valid DateTime.'

我认为设置null为日历日期选择器的日期值是无效的。更改组合框时如何清除这些值?

标签: c#uwp

解决方案


如果您将Date属性设置为nullstring也将是null:使用以下使用安全导航运算符 ( ?.) 的代码:

var fromDate = DatePicker_FromDate.Date?.ToString("dd-MM-yyyy");
var toDate = DatePicker_ToDate.Date?.ToString("dd-MM-yyyy");

我想这就是你想要的。

另请注意,首先将 a 转换DateTime为 astring只是将其转换回 aDateTime然后再将其转换为 a 是没有意义的string...


推荐阅读