2011-12-06 86 views
0

mvvmパターンを使用してwpf画面で継続的な更新で現在の時刻を画面に表示します。MVVMを使用してWPFで連続表示された現在の時刻表示

私は私のビューモデル

にこのコードを書いていますし、私はプロパティで私のテキストブロックをバインドさ

public string GetCurrentDateTime() 
{ 
    try 
    { 
     DispatcherTimer timer = new DispatcherTimer(new TimeSpan(0, 0, 1), 
      DispatcherPriority.Normal, 
      delegate 
      { 
       this.CurrentDateTime = DateTime.Now.ToString("HH:mm:ss"); 
      }, 
      this.Dispatcher); 

      return CurrentDateTime; 
    } 
    catch 
    { 
     return CurrentDateTime; 
    } 
} 

この方法を書いたが、this.CurrentDateTimeがヌルであるとして、それは例外を示しています。

何か提案がありますか?

+0

を働いているタイマー

private void dispatcherTimer_Tick(object sender, EventArgs e) { // Updating the Label which displays the current second this.CurrentDateTime = DateTime.Now.ToString(" HH:mm tt"); // Forcing the CommandManager to raise the RequerySuggested event CommandManager.InvalidateRequerySuggested(); } 

ための新しい方法を追加したGetCurrentDateTimeメソッドのtryブロック

try { DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = new TimeSpan(0, 0, 1); dispatcherTimer.Start(); return CurrentDateTime; } 

、これでコードを変更! GetCurrentDateTimeが呼び出されると常に新しいタイマーを開始します。 – PVitt

答えて

2

あなたの意図がRaisePropertyChanged(()=> this.CurrentDateTime)でわかりません。

それが通知を変更し、その後、このコードは、あなたのVMで

public event PropertyChangedEventHandler PropertyChanged; 

protected void OnPropertyChanged(string propertyName) 
{ 

    if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
} 

あるべきMVVMプロパティの世話をするのであれば、あなたのセットが継続的にあなたの時間を更新する

set 
{ 
    if (value != _currentDateTime) 
    { 
     _currentDateTime = value; 
     OnPropertyChanged("CurrentDateTime"); 
    } 
} 

、使用する必要がありますタイマー http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.71).aspx

次に、間隔を1秒と設定し、各タイマー経過イベントでCurrentDatを設定することができますeTime

CurrentDateTime=DateTime.Now.ToString(); 
+3

RaisePropertyChangedにはRaisePropertyChanged(式> propertyExpression)というシグネチャがあり、式の右辺を文字列プロパティ名に解決するために式ツリーが解析されていると思います。私はビューモデルで同じことをして、プロパティとGUI文字列を早期にバインドするようにしました。プロパティ名と魔法の文字列としてプロパティ名情報を複製する必要はありません。 –

+0

ご返信ありがとうございます。 – Kanvas

0

なぜこの問題が発生しているのか分かりませんが、この機能はわずかながらコードが変更されています。

私は今、それは十分注意してください

関連する問題