我正在使用文本框所需的TimeSpan值。输入的内容需要进行验证,并且可以采用几种不同的格式(例如1300表示13:00)。我做了一些工作来检查并在viewmodel中将其转换。但是在那之后我如何刷新文本框中的文本?

<TextBox Text="{Binding Path= OpenHourFromText, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}" ></TextBox>

OpenHourFromValue是我用于验证和数据绑定(bind)的字符串属性
    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; }

}

该 View 模型继承自Microsoft.Practices.Prism.ViewModel.NotificationObject

在文本框中输入1300之后,OpenHourFrom将被更新。但是文本框的文本不会更改为13:00。为什么?请帮助,许多。

最佳答案

当TextBox设置一些值时,它不会调用get。解决方案可以像用Dispatcher.BeginInvoke(()=> 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"));
   }

关于silverlight - 如何使用NotificationObject在Silverlight MVM中刷新绑定(bind)数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13015585/

10-11 17:24