在代码后面获取更新的类计时器时间
本文关键字:计时器 时间 更新 获取 代码 | 更新日期: 2023-09-27 17:56:22
我有一个 MVC 类,我在其中继承了 INotifyPropertyChanged
我有一个时钟计时器,其中分钟秒和小时更改 xaml 中的 coontrol 更新为OnPropertyChanged("Time");例如。这对于旋转 3 根指针的模拟时钟非常有用。但是,我想通过在矩形 7 段中绘制线条或切换可见性来制作数字时钟。
因此,为了做到这一点,我必须在隐藏的代码中执行此操作。因此,我需要能够访问我在 ClockViewModel 中创建的时间:INotifyPropertyChanged 类因此,从后面的代码中,我想利用这段时间将可见性切换到矩形或绘制段以显示时间。
我有一个 mvc 模拟时钟,可以从属性更改中旋转指针,但我看不到如何以相同的方式切换可见性或绘制/绘画。
那么,有没有办法从后面的代码中的类中获取时间? 或者当时间更改时获取 on 属性更改? 还是我必须在代码隐藏中制作一个单独的非 MVC 计时器?
这是类
class ClockViewModel : INotifyPropertyChanged
{
public ClockViewModel()
{
_timer = new System.Timers.Timer(1000);
_timer.Elapsed += _timer_Elapsed;
_timer.Start();
}
我想做的是从类中获取常量时间,对其运行 switch 语句,以便我可以切换某些行的可见性以显示时间。或者,只需相应地绘制适当的线条。
我可以将文本块文本绑定到OnPropertyChanged("DigitalTime");像数字一样显示时间,但这违背了我想做的事情。
我会向视图模型添加属性,以定义每个线段的可见性。
然后,每个属性获取者将根据要显示的数字计算该行是否应该可见。
现在,您可以将每行的可见性属性绑定到视图模型中的相应属性,并调用 OnPropertyChanged(") (使用空字符串)来引发视图模型的所有侦听器。
一个简单的改进是分解出在数字时钟中显示一位数字的用户控件。然后,您可以对需要显示的每个数字重复使用该控件。
编辑:
我不会为你编写整个控件的代码(这有什么用?),但让我举个例子。我假设你有一组线条控件,可能在网格或类似的东西中。要绘制一个数字,您需要显示一些线条并隐藏其他线条。
现在,您需要一些 xaml 和一个提供数据的视图模型。
你的 Xaml 应该看起来像这样:
<Line X1="10" X2="10" Y1="10" Y2="20" Visibility="{Binding Line1Visibility, Mode=OneWay}" />
<Line X1="10" X2="20" Y2="10" Y2="10" Visibility="{Binding Line2Visibility, Mode=OneWay}" />
.... and so on
您需要定义所有行,但不需要命名它们。不要使用我的 X 和 Y 值。它们仅用于示例。 另请注意可见的绑定。这是单向的,因为我们不想从我们的控制中设置它。
现在,您需要视图模型。它应定义所有可见性的属性以及设置要显示的数字的属性。它应该是这样的:
public class DigitalNumberViewModel : INotifyPropertyChanged
{
private int _numberToDisplay;
public int NumberToDisplay
{
get { return _numberToDisplay; }
set
{
_numberToDisplay = value;
OnPropertyChanged("");
}
}
public Visibility Line1Visibility
{
get
{
switch (NumberToDisplay)
{
case 0:
return Visibility.Visible;
case 1:
return Visibility.Hidden;
//... and so on
}
}
}
public Visibility Line2Visibility
{ .... }
// ... and so on
}
现在,您有一个定义所有线可见性的视图模型和一个可以设置的属性,该属性将为视图模型中的所有属性调用属性更改事件。您应该能够自己填写其余部分。:-)
祝你好运!