C# 使用Dispatchermer显示随机数
我一直在寻找答案,但似乎没有一个符合我的问题 我正在尝试采用MvVM方法,但我认为我并不完全理解它 我正在尝试在WPF中创建RPM显示 我希望它显示一个数字(介于0-3000之间),并每秒更新一次这个数字(到C# 使用Dispatchermer显示随机数,c#,wpf,random,mvvm,C#,Wpf,Random,Mvvm,我一直在寻找答案,但似乎没有一个符合我的问题 我正在尝试采用MvVM方法,但我认为我并不完全理解它 我正在尝试在WPF中创建RPM显示 我希望它显示一个数字(介于0-3000之间),并每秒更新一次这个数字(到文本块) 我已经创建了一个新类,尝试在其中创建一个Dispatchermer和Random generator,然后将其放在UI文本块中 using System; using System.Collections.Generic; using System.Text; using Syst
文本块)
我已经创建了一个新类,尝试在其中创建一个Dispatchermer和Random generator,然后将其放在UI文本块中
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();
}
}
}
我的MainWindow.xaml.cs看起来像
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
this.DataContext = new GenerateRpm();
}
}
}
我遗漏了什么和/或做错了什么才能做到这一点?使用如下所示的视图模型,并使用由计时器周期性更新的公共属性
确保属性设置程序触发更改通知,例如INotifyPropertyChanged接口的PropertyChanged
事件
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private readonly Random random = new Random();
public MainWindowViewModel()
{
var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
timer.Tick += Timer_Tick;
timer.Start();
}
private int randomRpm;
public int RandomRpm
{
get { return randomRpm; }
set
{
randomRpm = value;
PropertyChanged?.Invoke(
this, new PropertyChangedEventArgs(nameof(RandomRpm)));
}
}
private void Timer_Tick(object sender, EventArgs e)
{
RandomRpm = random.Next(0, 3001);
}
}
将视图模型类的实例分配给主窗口的DataContext:
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
在视图中,将图元绑定到视图模型属性:
<TextBlock Text="{Binding RandomRpm}"/>
MainWindow MainWindow=newmainwindow()没有任何意义。GeneratorPM应该公开并更新视图将绑定到的公共属性。同时移动Random Random=new Random()将其编码为>并使其成为类成员。并且GenerateRpm rpm=new GenerateRpm()代码>在Tick处理程序中也是无意义的。那么TimeSpan(0,0,5)
应该是多少秒呢?感谢您的澄清。我对编程非常陌生,我仍在尝试理解绑定和访问的方式。这就是为什么我会犯你在我的问题上评论的错误。
<TextBlock Text="{Binding RandomRpm}"/>