Я совершенно новичок в приложении WPF и начинаю изучать, как кодировать приложение. Когда я пытался написать простой код, чтобы проверить, как он работает, код не мог работать должным образом.
Намерение состоит в том, чтобы просто получить текущее системное время по Datetime.Now и показывать его в Textblock, обновляемом каждые 500 мс. , - Я просто хочу протестировать среду, в которой код выполняется и обрабатывается за окном, чтобы получить / рассчитать последние данные и отобразить их в окне.
Однако, с помощью простого кода ниже, текст в окне просто получите время один раз и никогда не обновляйтесь, пока работает l oop и обновляется "ClockText".
Я уверен, что допустил глупую ошибку, но не смог найти неправильную точку , Пожалуйста, помогите мне!
[MainWindow.xaml]
<Window x:Class="wpfTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:wpfTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" FontSize="40"
Text="{Binding ClockText, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
[MainWindow.xaml.cs]
public partial class MainWindow : Window
{
private Clock clk;
public MainWindow()
{
InitializeComponent();
clk = new Clock() { ClockText = "HH:MM:SS" };
this.DataContext = clk;
clk.ClockLogic(ref clk);
}
}
public class ClockViewModel : INotifyPropertyChanged
{
private string clockText;
public string ClockText
{
get { return clockText; }
set
{
clockText = value;
NotifyPropertyChanged("ClockText");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged == null)
{
return;
}
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public class Clock
{
public string ClockText { get; set; }
public async void ClockLogic()
{
while (true)
{
ClockText = DateTime.Now.ToString();
Console.WriteLine(ClockText); // for debug
await Task.Delay(500);
}
}
}
}