2012-10-22 97 views
1

我正在處理文本框所需的TimeSpan值。輸入內容需要被驗證,並且可能有幾種不同的格式(前1300表示13:00)。我做了一些工作來檢查並將其轉換爲viewmodel。但之後,我如何刷新文本框中的文本?如何使用NotificationObject刷新silverlight mvvm中的綁定數據

<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; } 

} 

的視圖模型從Microsoft.Practices.Prism.ViewModel.NotificationObject

繼承I輸入1300在之後的字符串屬性文本框,OpenHourFrom被更新。但文本框的文本不會更改爲13:00。爲什麼?請幫助,許多thx。

回答

1

當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")); 
    } 
1

你養一個PropertyChange通知物業UpdateTimeText,而你的實際屬性的名稱爲OpenHourFromText

更改PropertyChange通知募集通知正確的屬性,它應該爲你更新。

+0

對不起,我錯誤地粘貼了代碼,它是我的源代碼中的OpenHourFromText。但它不適合我。 – aiyagaze

+0

@aiyagaze如果您在綁定中設置了「UpdateSourceTrigger = PropertyChanged」,它會工作嗎?默認值爲「LostFocus」,這意味着它只會在焦點丟失時更新源 – Rachel

相關問題