类中的WPF访问标签
本文关键字:访问 标签 WPF | 更新日期: 2023-09-27 18:05:28
Service.cs
public class Service
{
private Timer timer;
private int hours;
private int minutes;
public Service()
{
timer = new Timer();
timer.Interval = 60000;
timer.Tick += new System.EventHandler(OnTick);
// ...
}
public void StartTimer() { /* ... */ }
public void PauseTimer() { /* ... */ }
private void OnTick(object sender, EventArgs e)
{
if (minutes == 59) {
minutes = 0;
hours += 1;
} else {
minutes += 1;
}
//...
// NOW I WANT TO SET THE CONTENT OF servicePage.hoursl AND servicePage.minutesl
// ACCORDING TO THE VALUES I GET ON this.hours AND this.minutes
}
servicePage.xaml
<Label x:Name="hoursl" Grid.Row="1" Grid.Column="0" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Label x:Name="minutesl" Grid.Row="1" Grid.Column="2" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center"/>
servicePage.xaml.cs
public partial class servicePage : Page { /* ... */ }
我有一个名为Service的类,其中我需要为Service的每个实例都有一个Timer。然后我有一个有两个标签的页面,一个表示小时,一个代表分钟。
有没有办法从函数OnTick((上的servicePage访问标签?并将这些标签的内容设置为计时器提供的小时和分钟值?
看起来您的ServicePage需要订阅Service类发布的事件。这样它就会知道计时器何时滴答作响。
然后可以适当地更新这两个标签。
如果使用MVVM,您的视图模型将订阅事件,并通过绑定更新视图中的标签。
下面是一个简单的非MVVM示例:
public class Service
{
public delegate void TimerTickHandler(int hours, int minutes);
public event TimerTickHandler TimerTick;
.
.
.
private void OnTick(object sender, EventArgs e)
{
...
if (TimerTick != null)
TimerTick(hours, minutes);
}
}
现在,您的ServicePage类将需要该Service类的一个实例并订阅该事件。如果您选择MVVM路线,也可以采用类似的方法。
如果您的Service类仅在Application_Startup上实例化,如果有意义的话,您可以按照singleton模式存储实例,这样其他类就可以获得该实例。只有在每个应用程序只能有一个定时器实例的情况下,这才会起作用。
辛格尔顿:https://msdn.microsoft.com/en-us/library/ff650316.aspx
一旦Service类是一个单例,ServicePage.xaml.cs就可以获得公共实例并订阅TimerTick事件。
希望这能有所帮助。