如何使用NotificationObject刷新silverlight mvvm中的绑定数据

时间:2012-10-22 16:21:54

标签: silverlight mvvm binding

我正在处理一个需要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。

2 个答案:

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