我正在处理一个需要TimeSpan值的文本框。输入内容需要验证,并且可以采用几种不同的格式(ex 1300表示13:00)。我做了一些工作来检查并在viewmodel中转换它。但之后如何刷新文本框中的文本?
<TextBox Text="{Binding Path= OpenHourFromText, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}" ></TextBox>
OpenHourFromValue是一个字符串属性,用于验证和数据绑定
public class MainPageViewModel : NotificationObject{
public string OpenHourFromText
{
get
{
//OpenHourFrom is a TimeSpan property that contain the value
if (OpenHourFrom != null)
{
return GetOpeningHourText(OpenHourFrom); //fomat the time
}
else
{
return "";
}
}
set
{
//do validation and convert here. 1300 will be changed to 13:00 TimeSpan type
OpenHourFrom = ConvertToTimeSpan(value);
RaisePropertyChanged("OpenHourFromText");
}
}
public TimeSpan OpenHourFrom { get; set; }
}
viewmodel继承自Microsoft.Practices.Prism.ViewModel.NotificationObject
在文本框中输入1300后,OpenHourFrom会更新。但文本框的文本不会更改为13:00。为什么?请帮助,很多thx。
答案 0 :(得分:1)
您正在为属性UpdateTimeText
提出PropertyChange通知,而您的实际属性名称为OpenHourFromText
更改PropertyChange
通知以提出正确属性的通知,并且应该为您更新。
答案 1 :(得分:1)
当TextBox设置一些值时,它不会调用get。解决方法就像用Dispatcher.BeginInvoke(()=&gt; RaisePropertyChanged(“OpenHourFromText”)替换RaisePropertyChanged(“OpenHourFromText”);它将延迟解雇该事件。
set
{
//do validation and convert here. 1300 will be changed to 13:00 TimeSpan type
OpenHourFrom = ConvertToTimeSpan(value);
Dispatcher.BeginInvoke(() => RaisePropertyChanged("OpenHourFromText"));
}