2017-09-06 91 views
0

我想單擊特定數據網格行上的按鈕時初始化計時器。初始化DataGrid中每個按鈕的計時器點擊

例如:我有多行播放按鈕,按下時我想在該特定行上啓動一個計時器只有並且在暫停時我只想暫停一個計時器。

到目前爲止,這裏是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

我沒有用你的確切方式,但它給了我一個想法如何排序我的問題,所以謝謝。 –