WPF DataTemplate - 当新项目添加到集合时触发事件?
将新项目添加到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但 并没有完全工作,我想无论是 方式
我尝试了其他一些事情,但我没有完全记住它们。
任何建议将不胜感激!
如果我正确读取您的XAML,您是否正在为TabControl创建单个Chart控件并在TabItem更改时更改其数据?如果是这样,您应该可以使用SelectionChanged
事件。
将Chart控件放在ItemTemplate中可能会更好,因此当用户切换标签或添加新标签时,它会自动加载所选的Flights
数据。
我不认为SelectionChanged是我需要的,因为当tabitem被加载时,那是当我需要调用图表控件上的一个方法:o( – 2010-11-09 14:35:16
)在这种情况下,存在一个TabItemLoaded事件,为目标类型'{x:Type TabItem}'添加一个样式到'TabControl.Resources'并使用E ventSetter设置Loaded事件。另一种方法是将图表控件从'TabControl.ContentTemplate'移动到'TabControl.ItemTemplate'中,然后在其上运行Loaded事件。 – Rachel 2010-11-09 15:06:17
我想最初我避免了EventSetter,因为它在每个现有选项卡上激发了Loaded事件,而不仅仅是一个新添加的事件。我想我会修补这个,看看我是否可以只处理新的标签。谢谢!! :) – 2010-11-09 15:16:46
您的Flights
集合应该是ObservableCollection<>类型。 xaml中的ItemsSource绑定将订阅其CollectionChanged事件并添加/删除选项卡。至于在Chart上调用方法,WindowsFormHost是否有Loaded事件?因为将为每个创建的选项卡创建一个新的。
我建议将它更改为ObservableCollection,因为List 不会在添加新项目时自动更新UI,ObservableCollection 将会是 – Rachel 2010-11-09 14:31:37
航班的类型为List 。 TabControl的DataContext被设置为我的ViewModel,它有一个名为Flights的属性,它是列表
好吧现在界面正在更新当更新Flights集合 – 2010-11-09 14:33:22
lol @编辑。谢谢。 :) – 2010-11-09 15:21:45