【问题标题】:How to clear Calendar Date Picker Selected Values in UWP, C#如何在 UWP、C# 中清除日历日期选择器选择的值
【发布时间】:2021-04-29 05:51:21
【问题描述】:

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

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

  • 过滤组合框(包含TodayYesterdayLast WeekLast Month
  • 两个日历日期选择器和一个按钮(分别是 FromTo,当我单击按钮时,事件会采用 FromTo 日期值的值并完成工作)

现在,我想做一些 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


    【解决方案1】:

    更新: 要清除 CalendarDatePicker 的值,您可以将 Date 属性设置为 null,如下所示。

    DatePicker_FromDate.Date = null;
    DatePicker_ToDate.Date= null;
    

    传值,先判断是否为空,再操作其值。

    string toDate= = DatePicker_ToDate.Date == null ? "" : DatePicker_ToDate.Date.Value.ToString("dd/MM/yyyy");
    

    【讨论】:

    • SelectedDate 属性未显示。
    • 我使用的是这个命名空间:Windows.UI.Xaml.Controls.
    • 我使用的是Calendar Date Picker,而不是日期选择器。
    • 我很抱歉。我已经更新了我的答案,请检查一下。
    • 当CalendarDatePicker的Date为null时,也可以用其他字符串代替"",如string toDate= = DatePicker_ToDate.Date == null ? "00/00/0000" : DatePicker_ToDate.Date.Value.ToString("dd/MM/yyyy");
    【解决方案2】:

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

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

    我想这就是你想要的。

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

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多