Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
WPF DataTemplate-将新项添加到集合时激发的事件?_Wpf_Data Binding_Tabcontrol - Fatal编程技术网

WPF DataTemplate-将新项添加到集合时激发的事件?

WPF DataTemplate-将新项添加到集合时激发的事件?,wpf,data-binding,tabcontrol,Wpf,Data Binding,Tabcontrol,将新项目添加到Flights集合时,会将新的TabItem添加到TabControl。添加新选项卡时,我需要调用图表控件上的方法。问题是我无法找出要处理的正确事件 我的XAML如下所示: <TabControl Name="chartControl" ItemsSource="{Binding Flights}"> <TabControl.ItemContainerStyle> <Style TargetType="TabItem">

将新项目添加到
Flights
集合时,会将新的
TabItem
添加到
TabControl
。添加新选项卡时,我需要调用图表控件上的方法。问题是我无法找出要处理的正确事件

我的XAML如下所示:

<TabControl Name="chartControl" ItemsSource="{Binding Flights}">
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="Header" Value="{Binding Name}" />
        </Style>
    </TabControl.ItemContainerStyle>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <WindowsFormHost Name="winHost">
                <legacy:Chart></legacy:Chart>
            </WindowsFormHost>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

  • 我尝试处理
    选项卡Control
    上加载的
    ,
    但那只开过一次枪
    
  • 我尝试了一个
    DataTemplate
    路由事件上的
    触发器

    FrameWorkElement.Loaded
    但我很确定这不适合我的情况
  • 我试过一个事件设定者但是 没有按照我想要的方式工作 或者
我尝试了一些其他的事情,但我不太记得全部


如有任何建议,将不胜感激

您的
Flights
集合应为类型。xaml中的ItemsSource绑定将订阅其CollectionChanged事件和添加/删除选项卡。至于调用图表上的方法,WindowsFormHost是否有已加载的事件?因为将为创建的每个选项卡创建一个新的选项卡。

如果我正确读取了XAML,您是在为TabControl创建一个图表控件,并在TabItem更改时更改其数据吗?如果是,您应该能够使用
SelectionChanged
事件


您最好将图表控件放在ItemTemplate中,这样当用户切换选项卡或添加新选项卡时,它会自动加载选定的
航班
数据。

我建议将其更改为ObservableCollection,因为添加新项时,列表不会自动更新UI,ObservableCollection类型为List。TabControl的DataContext设置为my ViewModel,它有一个名为Flights的属性,该属性为List,因此我没有CollectionChanged事件。我不认为o(现在,当Flights集合更新时,UI正在更新。将viewmodel的Flights更改为IList,然后可以将Flights列表传递到ObservaleCollection的构造函数中并使用它,因为ObservaleCollection实现了IList,我刚刚检查过,WindowsFormHost确实有一个加载的事件。订阅该列表,并调用图表上的方法。我不认为SelectionChanged是我需要的,因为当加载tabitem时,我需要调用图表控件上的方法:o(在这种情况下,有一个TabItemLoaded事件。为目标类型添加样式
{x:type tabitem}
TabControl.Resources
并使用EventSetter设置加载的事件。另一种方法是将图表控件从
TabControl.ContentTemplate
移动到
TabControl.ItemTemplate
中,然后在其上运行加载的事件。我想最初我避开了EventSetter,因为它触发了在每个现有选项卡上加载的事件,而不仅仅是新添加的。我想我将对此进行修补,看看是否只能处理新选项卡。谢谢!!:)