2017-09-06 11 views
0

特定のデータグリッド行のボタンをクリックすると、タイマーを初期化したいと考えています。クリックしたDataGrid内の各ボタンのタイマーを初期化

例:再生ボタン付きの複数の行があります。その特定の行でタイマーを開始したい場合はのみとなり、一時停止したい場合はその1つのタイマーを一時停止します。

ここまではC#コードです。

private void OnPlayButtonClicked(object sender, RoutedEventArgs e) 
{ 
    var selectedProject = ((FrameworkElement) sender).DataContext as Project; 

    if (selectedProject != null) 
    { 
     Console.WriteLine("Selected Project has been played: " + 
      selectedProject.ProjectName + " : Billed Hours - " + 
      selectedProject.ActualBilledHours); 

     if (ProjectDictionary.ContainsKey(selectedProject)) 
     { 
      ProjectDictionary.Remove(selectedProject); 

      var toggle = IsPlaying = !IsPlaying; 
      ProjectDictionary.Add(selectedProject, toggle); 

      foreach(var dict in ProjectDictionary) 
      { 
       if (dict.Key == selectedProject) 
       { 
        if (toggle) 
         Timer.Start(); 
        else 
         Timer.Stop(); 
       } 
      } 
     } 
    } 
} 
+0

この場合の送信者はボタンではありませんか? – stuicidle

+0

各行に対して複数のタイマーを初期化し、クリックされた行インデックスで特定のタイマーを開始/停止できますか? – Dia

+0

MVVMを使用すると簡単です。モデルのフィールドとしてTimerを使用して、再生ボタンをクリックして呼び出す – sTrenat

答えて

1

すべての行にグローバルタイマーを使用しているようです。あなたの質問は少し不明ですが、行ごとにタイマーが必要な場合は、たとえば、Projectオブジェクトごとにタイマーを辞書に格納することができます。このようなもの:

private readonly Dictionary<Project, Timer> _timers = new Dictionary<Project, Timer>(); 
private void OnPlayButtonClicked(object sender, RoutedEventArgs e) 
{ 
    var selectedProject = ((FrameworkElement)sender).DataContext as Project; 

    if (selectedProject != null) 
    { 
     Console.WriteLine("Selected Project has been played: " + 
      selectedProject.ProjectName + " : Billed Hours - " + 
      selectedProject.ActualBilledHours); 

     if (ProjectDictionary.ContainsKey(selectedProject)) 
     { 
      ProjectDictionary.Remove(selectedProject); 

      var toggle = IsPlaying = !IsPlaying; 
      ProjectDictionary.Add(selectedProject, toggle); 

      foreach (var dict in ProjectDictionary) 
      { 
       if (dict.Key == selectedProject) 
       { 
        //get the timer from the dictionary 
        Timer timer; 
        if (!_timers.TryGetValue(selectedProject, out timer)) 
        { 
         timer = new Timer(); 
         _timers.Add(selectedProject, timer); 
        } 

        //start or stop 
        if (toggle) 
         timer.Start(); 
        else 
         timer.Stop(); 
       } 
      } 
     } 
    } 
} 
+0

私はあなたの正確な方法を使用しませんでしたが、ありがとう。 –

関連する問題