WPF+动态控件+活动计时器事件

WPF+动态控件+活动计时器事件,wpf,events,dynamic,controls,Wpf,Events,Dynamic,Controls,您好,我正在创建一个列表框,每当用户单击按钮时,该列表框包含两个文本框示例控件以演示,并将它们添加到XAML中定义的stackpanel中 <StackPanel Name="myStackPanel"> <Button Name="myButton" Click="myButton_Click">Click to add a new button</Button> </StackPanel> private void myBu

您好,我正在创建一个列表框,每当用户单击按钮时,该列表框包含两个文本框示例控件以演示,并将它们添加到XAML中定义的stackpanel中

<StackPanel Name="myStackPanel">
    <Button Name="myButton" Click="myButton_Click">Click to add a new button</Button>
</StackPanel> 

    private void myButton_Click(object sender, RoutedEventArgs e)
    {
        TextBox tb = new TextBox();
        TextBox tb2 = new TextBox();

        tb.Text = "Some text 1";
        tb2.Text = "Some text 2";

        ListView lv = new ListView();
        lv.Name = "anotherLv";
        lv.Items.Add(tb);
        lv.Items.Add(tb2);

        this.myStackPanel.Children.Add(lv);
    }
这个很好用。 我需要的能力,启动计时器时,每个listview创建,将倒计时从5分钟到0。一旦计时器点击0,与该计时器关联的listview将从屏幕上删除。每次在相关列表框中输入某些文本或鼠标悬停时,计时器都需要重置回5分钟。 由于用户能够创建任意数量的这些listview,我需要为创建的每个listview创建一个单独的计时器,然后监视特定listview和包含的控件的事件。 我有几点要开始讨论。 1如何将计时器连接到每个listview? 2如何监控每个listview和其中的其他控件的事件以重置相关计时器

我希望这一切都有意义,有人能给我一些建议。 谢谢

如何将计时器附加到每个listview

你可以把计时器存到字典里。即,从ListViewItem到关联Dispatchermer的映射

我将如何监控每个listview和其中的其他控件的事件,以重置相关的计时器

您可以创建这些项,以便根据需要附加事件处理程序。例如:

ListView lv = new ListView();
lv.Name = "anotherLv";
lv.Items.Add(tb);
lv.Items.Add(tb2);

tb.TextChanged += ResetTimer;
tb2.TextChanged += ResetTimer;

private void ResetTimer(object sender, RoutedEventArgs e)
{
    //reset timer here
}

也就是说,我建议您将所有这些逻辑封装在视图模型中,而不是尝试直接在视图中执行所有操作。

谢谢Kent,这正是我需要Dispatcher的地方。我仍然不清楚listview的命名。在本例中,每次添加一个新的时,我们都将其命名为“anotherLv”。在将listview添加到字典之前,我是否应该动态命名控件,以便“anotherLv”+时间戳,以便在勾选事件中区分控件。我想我要问的是如何在ResetTimer事件中引用正确的listview,因为连接到不同TexBox集的所有TextChanged事件将调用相同的方法。好的,也许可以交换字典。换句话说,将Dispatchermer映射到相应的ListViewItems。因此,在事件处理程序中,Dispatchermer是sender参数,因此您可以使用它来查找相应的ListViewItem。