none
Afficher l'heure dans une fenêtre RRS feed

  • Question

  • Bonjour, 

    Je réalise une application WPF dans la quelle je souhaiterais afficher l'heure. 

    Pour cela j'ai créé un TextBlock dans mon fichier XAML.

    J'ai ensuite créé un dependency property retournant la date courante que j'actualise avec un DispatcherTimer toutes les 1000ms.

     

            public DateTime CurrentDate
            {
                get { return (DateTime) GetValue(DateProperty); }
                set { SetValue(DateProperty, value); }
            }
    
            public static readonly DependencyProperty DateProperty = DependencyProperty.Register("DateProperty", typeof(DateTime), typeof(MainWindow), new UIPropertyMetadata(DateTime.Now));
    
            public MainWindow()
            {
                InitializeComponent();
                CreateHour();
            }
    
            private void CreateHour()
            {
                timer = new DispatcherTimer();
                timer.Tick += OnTimerTicker;
                timer.Interval = TimeSpan.FromMilliseconds(1000);
                timer.Start();
            }
    
            private void OnTimerTicker(Object sender, EventArgs e)
            {
                this.DateHour = DateTime.Now;
            }
    

     


    J'ai pu binder la propriété CurrentDate au TextBlock dans le code en actualisant le champ Text du TextBlock dans OnTimerTicker.

    Cependant, je souhaiterai réaliser cette même action depuis le XAML.

    Comment puis-je m'y prendre ? 

     

    lundi 23 janvier 2012 12:14

Réponses

  • Bonjour,

    J'ai mis un this.DataContext=this pour faire le binding directement sur le code behind et je fais donc un <TextBlock Text="{Binding CurrentDate}"/> dans le XAML.

    Egalement je remplace this.DateHour=DateTime.Now; par this.CurrentDate=... ainsi que dans le "register" DataProperty par CurrentDate.

    Le mieux est sans doute de respecter les conventions habituelles (CurrentDateProperty au lieu de DateProperty) pour éviter de se mélanger les pinceaux.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Yohan D lundi 23 janvier 2012 14:18
    lundi 23 janvier 2012 12:50

Toutes les réponses

  • Bonjour,

    J'ai mis un this.DataContext=this pour faire le binding directement sur le code behind et je fais donc un <TextBlock Text="{Binding CurrentDate}"/> dans le XAML.

    Egalement je remplace this.DateHour=DateTime.Now; par this.CurrentDate=... ainsi que dans le "register" DataProperty par CurrentDate.

    Le mieux est sans doute de respecter les conventions habituelles (CurrentDateProperty au lieu de DateProperty) pour éviter de se mélanger les pinceaux.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Yohan D lundi 23 janvier 2012 14:18
    lundi 23 janvier 2012 12:50
  • Je ne connaissais pas l'usage du DataContext, je vais me renseigner de suite.


    Merci pour cette réponse rapide!

    lundi 23 janvier 2012 14:19
  • Bonjour,

    En résumer un datacontext  est la source de donnée de l'ensemble des éléments que tu veux affecter  à une info à partir d'une classe  pour l'aafichage ou traitement.Chaque element accede  par un binding dans le code xaml (v que c'est du wpf ou sl).
    On peux gérer plusieurs datacontexts dans une page ou user control si les n élements controls ont des sources distinctes.Si tu utilise le pattern MVVM chaque page est en général associé à un datacontext qui est la classe ViewModel .

     

    Tu as bien raison de se renseigner sur le datacontext,  sur le toile tu vera bcp d'informations .

     

    Bon courage est bonne chance

     


    So B
    lundi 23 janvier 2012 14:45
  • J'y vois déjà plus clair. Merci!
    lundi 23 janvier 2012 14:48