ViewModelで定期的に動作する処理を実装したい
定期的に動作する処理の実装を行いたいと考えております。
コードビハインドでDispatcherTimerを使用することにより実装することが出来ましたが、
MVVMではコードビハインドに書くことは推奨されないとのことですのでMVVMに則った
実装方法についてご教授いただけないでしょうか。
実装したコード
View
XAML
1<Window x:Class="DispatcherTimerTest.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 mc:Ignorable="d" 7 Title="MainWindow" Height="450" Width="800"> 8 <Grid> 9 <Label Content="{Binding LabelContent}"/> 10 </Grid> 11</Window>
C#
1 public partial class MainWindow : Window 2 { 3 public System.Windows.Threading.DispatcherTimer dispatcherTimer; 4 5 public MainWindow() 6 { 7 InitializeComponent(); 8 DataContext = ViewModel.Instance; 9 dispatcherTimer = new System.Windows.Threading.DispatcherTimer(System.Windows.Threading.DispatcherPriority.Normal); 10 dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100); 11 dispatcherTimer.Tick += DispatcherTimer_Tick; 12 dispatcherTimer.Start(); 13 14 } 15 16 ~MainWindow() 17 { 18 dispatcherTimer.Stop(); 19 } 20 21 private void DispatcherTimer_Tick(object sender, EventArgs e) 22 { 23 ViewModel.Instance.LabelContent += 1; 24 } 25 }
ViewModel
C#
1 class ViewModel : INotifyPropertyChanged 2 { 3 public static ViewModel Instance { get; } = new ViewModel(); 4 5 public event PropertyChangedEventHandler PropertyChanged; 6 protected void OnPropertyChanged(string name) 7 { 8 if (PropertyChanged != null) 9 { 10 PropertyChanged(this, new PropertyChangedEventArgs(name)); 11 } 12 } 13 14 public int LabelContent 15 { 16 get { return _LabelContent; } 17 set 18 { 19 _LabelContent = value; 20 OnPropertyChanged(nameof(LabelContent)); 21 } 22 } 23 private int _LabelContent; 24 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 13:31
2020/06/30 13:51
2020/07/01 03:27