Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为datagrid中单击的每个按钮初始化计时器_C#_Wpf_Timer_Datagrid - Fatal编程技术网

C# 为datagrid中单击的每个按钮初始化计时器

C# 为datagrid中单击的每个按钮初始化计时器,c#,wpf,timer,datagrid,C#,Wpf,Timer,Datagrid,我想在单击特定datagrid行上的按钮时初始化计时器 例如:我有多个带有播放按钮的行,当按下时,我只想在该特定行上启动一个计时器仅,当暂停时,我只想暂停这一个计时器 这是到目前为止的C代码 private void OnPlayButtonClicked(object sender, RoutedEventArgs e) { var selectedProject = ((FrameworkElement) sender).DataContext as Project; if

我想在单击特定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();
                }
            }
        }
    }
}

您似乎正在对所有行使用全局计时器。您的问题有点不清楚,但如果您希望每行有一个计时器,例如,您可以在字典中为每个
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();
                }
            }
        }
    }
}
private readonly Dictionary\u timers=new Dictionary();
私有void OnPlayButtonClicked(对象发送方,路由目标)
{
var selectedProject=((FrameworkElement)sender).DataContext作为项目;
如果(selectedProject!=null)
{
Console.WriteLine(“已播放选定项目:”+
selectedProject.ProjectName+“:计费小时数-+
所选项目。实际计费小时数);
if(ProjectDictionary.ContainsKey(selectedProject))
{
ProjectDictionary.Remove(selectedProject);
var toggle=isplay=!isplay;
添加(选择项目,切换);
foreach(项目字典中的变量dict)
{
if(dict.Key==selectedProject)
{
//从字典中获取计时器
定时器;
if(!\u timers.TryGetValue(selectedProject,out timer))
{
定时器=新定时器();
_timers.Add(selectedProject,timer);
}
//开始还是停止
如果(切换)
timer.Start();
其他的
timer.Stop();
}
}
}
}
}

在这种情况下,发送者不是按钮吗?您是否可以为每行初始化多个计时器,并通过单击的行索引启动/停止特定计时器?使用MVVM很容易,只需将计时器用作模型中的字段,并在播放按钮单击时将其提升,或者,如果MVVM因某种原因无法实现,你可以用一些肮脏的方式来做这件事:在你的ProjectDictionary中,你可以使用元组,甚至可以使用元组。我没有使用你的确切方式,但它给了我一个解决问题的方法,所以谢谢。