#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
в привязке.