2010-07-28 6 views
11

Eh bien, il me fallait lier DateTime.Now à un TextBlock, je que:Liaison à DateTime.Now. Mettre à jour la valeur

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

Maintenant, comment le forcer à mettre à jour? Il s'est le moment où le contrôle est chargé et ne mettre à jour ...

Répondre

21

Modifié (je ne compte pour lui vouloir mise à jour automatique):

Voilà a link d'une classe « Ticker » qui utilise INotifyPropertyChanged pour qu'il se mette à jour automatiquement. Voici le code du site:

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" 

Maintenant, cela fonctionnera:

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

Mauvais. Cela n'aidera pas. (C'est exactement ce qu'il a écrit) – SLaks

+0

Et pourquoi ça ne marchera pas? –

+0

Parce qu'il ne sera toujours pas mis à jour. Lisez la question à nouveau. – SLaks

1

Vous devez faire une minuterie qui met à jour la boîte de texte chaque seconde.

2

Pour Windows Phone, vous pouvez utiliser cet extrait

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; 

J'adapté le code de m-y. J'espère que celui-ci peut être utile aussi.

Questions connexes