2010-07-28 16 views
11

Eh, DateTime.Now bir TextBlock bağlamak gerekiyordu, bunu kullandım:DateTime.Now için bağlama. Değeri güncelle

 Text="{Binding Source={x:Static System:DateTime.Now},StringFormat='HH:mm:ss tt'}" 

Şimdi, nasıl güncelleştirmek için zorlamak için? Kontrolün yüklendiği ve güncellemediği zaman ...

cevap

21

Düzenlendi kontrolü yüklenir ve güncelleştirmek olmaz zamanı olsun:

İşte 'Ticker' sınıfının a link olduğunu INotifyPropertyChanged kullanır, böylece otomatik olarak güncellenir.

namespace TheJoyOfCode.WpfExample 
{ 
    public class Ticker : INotifyPropertyChanged 
    { 
     public Ticker() 
     { 
      Timer timer = new Timer(); 
      timer.Interval = 1000; // 1 second updates 
      timer.Elapsed += timer_Elapsed; 
      timer.Start(); 
     } 

     public DateTime Now 
     { 
      get { return DateTime.Now; } 
     } 

     void timer_Elapsed(object sender, ElapsedEventArgs e) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs("Now")); 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
    } 
} 


<Page.Resources> 
    <src:Ticker x:Key="ticker" /> 
</Page.Resources> 

<TextBox Text="{Binding Source={StaticResource ticker}, Path=Now, Mode=OneWay}"/> 

Declare:

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

Şimdi bu çalışacaktır:

<TextBox Text="{Binding Source={StaticResource ticker}, Path=Now, Mode=OneWay}"/> 
+2

Yanlış. Bu yardımcı olmayacak. (Yazdığı tam olarak budur) – SLaks

+0

Ve neden bu işe yaramaz? –

+0

Çünkü hala güncellenmiyor. Soruyu tekrar okuyun. – SLaks

1

Bunu güncellemeler bir zamanlayıcı yapmak gerekir İşte siteden kod her saniye metin kutusu.

Windows Phone için
2

, ben m-y kodunu adapte bu pasajı

public Timer() 
{ 
    DispatcherTimer timer = new DispatcherTimer(); 
    timer.Interval = TimeSpan.FromSeconds(1); // 1 second updates 
    timer.Tick += timer_Tick; 
    timer.Start(); 
} 

public DateTime Now 
{ 
    get { return DateTime.Now; } 
} 

void timer_Tick(object sender, EventArgs e) 
{ 
    if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs("Now")); 
} 

public event PropertyChangedEventHandler PropertyChanged; 

kullanabilirsiniz. Umarım bu da yararlı olabilir.