【问题标题】:How to clear DatePicker value in WPF 4.0 using MVVM如何使用 MVVM 在 WPF 4.0 中清除 DatePicker 值
【发布时间】:2011-08-08 21:32:57
【问题描述】:

型号

public class SearchParametersModel : ViewModelBase
{
   private string _fromDate;

   public string FromDate
   {
       get { return _fromDate; }
       set
       {
           _fromDate = value;
           VerifyPropertyName("FromDate");
       }
   }

   private string _toDate;

   public string ToDate
   {
       get { return _toDate; }
       set
       {
           _toDate = value;
           VerifyPropertyName("ToDate");
       }
   }

   private DateTime? _selectedFromdate;

   public DateTime? SelectedFromDate
   {
       get { return _selectedFromdate; }
       set
       {
           _selectedFromdate = value;
           VerifyPropertyName("SelectedFromDate");
       }
   }

   private DateTime? _selectedTodate;

   public DateTime? SelectedToDate
   {
       get { return _selectedTodate; }
       set
       {
           _selectedTodate = value;
           VerifyPropertyName("SelectedToDate");
       }
   }
}

视图模型

private void Clear()
   {
       try
       {
           SearchParametersMdl.ToDate = string.Empty;

           SearchParametersMdl.FromDate = string.Empty;

           SearchParametersMdl.SelectedFromDate = null;

           SearchParametersMdl.SelectedToDate = null;

       }
       catch (Exception ex)
       {

           throw ex;
       }
   }

查看

<DatePicker Height="25" HorizontalAlignment="Left" Margin="84,71,0,0"
Name="dtpFromDate" VerticalAlignment="Top" Width="115" Text="{Binding Path=
SearchParametersMdl.FromDate,Mode=TwoWay}" SelectedDate="{Binding
Path=SearchParametersMdl.SelectedFromDate,Mode=TwoWay}"  />

<DatePicker Height="25" HorizontalAlignment="Right" Margin="0,70,481,0"
Name="dtpToDate"  VerticalAlignment="Top" Width="115" Text="{Binding Path=
SearchParametersMdl.ToDate,Mode=TwoWay}" SelectedDate="{Binding
Path=SearchParametersMdl.SelectedToDate ,Mode=TwoWay}" />

无法清除日期选择器控件中的值。

我想在触发 clear cammand 后显示默认值(即选择一个日期)。

【问题讨论】:

  • 清除时检查控制台输出。我猜你会收到一些关于无法转换绑定值的消息。
  • 您的绑定是否正常工作?您需要确保在属性的设置器中引发 PropertyChanged 事件 - “VeryifyPropertyName”会这样做吗?

标签: mvvm mvvm-light


【解决方案1】:

您应该删除Text 属性的绑定,这可能会干扰绑定过程。 SelectedDate 应该足够了。

特别是当您绑定到字符串属性时,除非您在绑定中指定 TargetNullValue,否则绑定不知道要绑定什么以将 null 转换为。

【讨论】:

    【解决方案2】:

    我们可以使用转换器类清除日期:

    在我的应用程序中,我使用波纹管转换器来清除日期选择器值

    请找到下面的代码 sn-p 它可能对你有帮助....

    internal class DateConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string date = ((DateTime)value).ToShortDateString();
            if (!date.Equals("1/1/1753") && !date.Equals("1/1/0001"))
                return ((DateTime)value).ToShortDateString();
            return String.Empty;
        }
        /// <summary>
        /// method for convert back
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string strValue = value == null ? string.Empty : value.ToString();
            DateTime resultDateTime;
            if (!string.IsNullOrEmpty(strValue))
                return DateTime.TryParse(strValue, out resultDateTime) ? resultDateTime : value;
            else
                return new DateTime(1753, 1, 1);
        }
    }
    

    我正在使用它,如下所示:

    <UserControl.Resources>        
        <local:DateConverter x:Key="converter"/>
    </UserControl.Resources>
    

    here local:转换器类的命名空间

    <DatePicker x:Name="date_DueDate" FontSize="9" Visibility="{Binding IsDueDateVisible}" SelectedDate="{Binding *ViewModelProperty*, Converter={StaticResource converter}, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True}" SelectedDateFormat="Short"  Margin="5,5,0,0"  VerticalAlignment="Top" MinWidth="100" MaxWidth="100" TabIndex="41"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 2011-04-09
      • 2015-09-10
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多