如何使用MVVM清除WPF 4.0中的DatePicker值

时间:2011-04-19 17:54:57

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

视图模型

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后显示默认值(即选择日期)。

2 个答案:

答案 0 :(得分:0)

您应该删除可能搞乱绑定过程的Text属性的绑定。 SelectedDate就足够了。

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

答案 1 :(得分:0)

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

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

请找到它可以帮助你的轰鸣声代码片段....

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>

这里是本地:转换器类的名称空间

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