mercredi 12 juin 2019

Displaying random numbers with a DispatcherTimer in wpf

I've been looking for an answer but none seem to fit my question.

I am trying to adapt the MvVM method, but I dont think I fully understand it..

I'm trying to create an RPM display in wpf. I want it to display an number (between 0-3000) and update this number every second (into a TextBlock).

I have created a new class where I try to create a DispatcherTimer and Random generator and then put that in the UI TextBlock.

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Threading;

namespace Aldeba.UI.WpfClient
{
    public class GenerateRpm
    {
        public GenerateRpm()
        {
            DispatcherTimer timer = new DispatcherTimer
            {
                Interval = new TimeSpan(0, 0, 5)
            };
            timer.Start();
            timer.Tick += Timer_Tick;
        }
        public int RandomValue()
        {
            Random random = new Random();
            int RandomRpm = random.Next(0, 3001);
            return RandomRpm;
        }
        void Timer_Tick(object sender, EventArgs e)
        {
            MainWindow mainWindow = new MainWindow();

            GenerateRpm rpm = new GenerateRpm();
            mainWindow.RpmDisplayLabel.Text = rpm.RandomValue().ToString();
        }
    }
}

My MainWindow.xaml.cs looks like...

   /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.DataContext = new MainWindowViewModel();
            this.DataContext = new GenerateRpm();
        }
    }
}

Do I need to add datacontext to all classes I want to access (for bindings for an example)?

This is the MainWindow where I want the Rpm displayed in the second TextBlock.

<StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center">
            <TextBlock Text="RPM:" Style="{StaticResource RpmDisplay}" />
            <TextBlock x:Name="RpmDisplayLabel" Text="{Binding }" Style="{StaticResource RpmDisplay}" />
        </StackPanel>

What am I missing and/ or doing wrong to be able to do this?




Aucun commentaire:

Enregistrer un commentaire