Как очистить значение выбора даты в WPF 4.0 с помощью MVVM

#mvvm #mvvm-light

#mvvm #mvvm-light

Вопрос:

Модель

 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");
       }
   }
}
  

ViewModel

 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}" />
  

Не удается очистить значения в элементе управления datepicker.

Я хочу отобразить значение по умолчанию (т. Е. Выбрать дату) после запуска clear cammand.

Комментарии:

1. Проверьте вывод консоли при очистке. Я предполагаю, что у вас появится сообщение о невозможности преобразовать значение для привязки.

2. Работают ли ваши привязки вообще? Вам нужно убедиться, что вы вызываете событие PropertyChanged в настройках свойств — делает ли это «VeryifyPropertyName»?

Ответ №1:

мы можем очистить дату с помощью класса converter:

в моем приложении я использую нижеприведенный преобразователь для очистки значения выбора даты

пожалуйста, найдите приведенный ниже фрагмент кода, это может вам помочь….

 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") amp;amp; !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>
  

здесь local: namesapce для класса convertor

 <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"/>
  

Ответ №2:

Вам следует удалить привязку для Text свойства, которое, вероятно, мешает процессу привязки. Выбранной даты должно быть достаточно.

Особенно когда вы привязываетесь к строковому свойству, привязка не знает, к чему привязать преобразование null , если вы не укажете TargetNullValue в привязке.