2010-11-09 120 views
0

将新项目添加到Flights系列时,将向TabControl添加新TabItem。添加新选项卡时,我需要调用Chart控件上的方法。问题是我无法弄清楚正确的事件来处理。WPF DataTemplate - 当新项目添加到集合时触发事件?

我的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> 
  • 我试图在TabControl, 但是唯一的触发一次处理Loaded
  • 我试图在RoutedEvent
    FrameWorkElement.Loaded一个DataTemplate Trigger但我敢肯定,这并不意味着我的情况
  • 我尝试过的EventSetter但 并没有完全工作,我想无论是
  • 方式

我尝试了其他一些事情,但我没有完全记住它们。

任何建议将不胜感激!

+0

lol @编辑。谢谢。 :) – 2010-11-09 15:21:45

回答

1

如果我正确读取您的XAML,您是否正在为TabControl创建单个Chart控件并在TabItem更改时更改其数据?如果是这样,您应该可以使用SelectionChanged事件。

将Chart控件放在ItemTemplate中可能会更好,因此当用户切换标签或添加新标签时,它会自动加载所选的Flights数据。

+0

我不认为SelectionChanged是我需要的,因为当tabitem被加载时,那是当我需要调用图表控件上的一个方法:o( – 2010-11-09 14:35:16

+0

)在这种情况下,存在一个TabItemLoaded事件,为目标类型'{x:Type TabItem}'添加一个样式到'TabControl.Resources'并使用E ventSetter设置Loaded事件。另一种方法是将图表控件从'TabControl.ContentTemplate'移动到'TabControl.ItemTemplate'中,然后在其上运行Loaded事件。 – Rachel 2010-11-09 15:06:17

+0

我想最初我避免了EventSetter,因为它在每个现有选项卡上激发了Loaded事件,而不仅仅是一个新添加的事件。我想我会修补这个,看看我是否可以只处理新的标签。谢谢!! :) – 2010-11-09 15:16:46

1

您的Flights集合应该是ObservableCollection<>类型。 xaml中的ItemsSource绑定将订阅其CollectionChanged事件并添加/删除选项卡。至于在Chart上调用方法,WindowsFormHost是否有Loaded事件?因为将为每个创建的选项卡创建一个新的。

+0

我建议将它更改为ObservableCollection,因为List <>不会在添加新项目时自动更新UI,ObservableCollection <>将会是 – Rachel 2010-11-09 14:31:37

+0

航班的类型为List <>。 TabControl的DataContext被设置为我的ViewModel,它有一个名为Flights的属性,它是列表,所以我没有CollectionChanged事件。我不认为。 :o( – 2010-11-09 14:31:52

+0

好吧现在界面正在更新当更新Flights集合 – 2010-11-09 14:33:22

相关问题