【发布时间】:2020-03-11 21:28:13
【问题描述】:
我有一个这样的TabView:
<TabView ItemsSource="{Binding Documents}">
<TabView.ItemTemplate>
<DataTemplate>
<local:MyUserControl />
</DataTemplate>
</TabView.ItemTemplate>
</TabView>
我为MyUserControl.Loaded 事件设置了一个事件处理程序,只是为了看看会发生什么。令人惊讶的是,事件只会触发一次,无论哪个选项卡处于活动状态。当您在选项卡之间切换时,Loaded 事件不会多次触发????
因此,我尝试捕获 Visibily 更改事件(使用 RegisterPropertyChangedCallback 方法)。它从未被解雇!
然后,我想知道在 MyCustomControl每当活动选项卡更改时中是否会触发任何事件,因为 Loaded 和“VisibilityChanged”事件没有被触发?
每当 TabView 活动内容发生变化时,我都需要通过消息总线发送消息,但我需要 MyUserControl 知道变化,因为它是唯一知道在消息中发送什么的人。
【问题讨论】:
-
检查“SelectionChanged”-Event => docs.microsoft.com/en-us/uwp/api/… 我想这就是你想要的。一旦整个 UI 元素完全加载,Loaded-Event 就会触发...
-
TabView 没有可以绑定的 SelectedItem 吗?然后,您可以在 SelectedItem Document 更改时调用任何方法。
-
好的,SelectItem 事件的问题是它在孩子的 Loaded 事件被触发之前被触发。此外,正如我所说,我需要拦截正在“激活”的子事件(其内容在每个选项卡开关上可见的事件)以发送一条消息(使用 Messenger 模式),显示“我已被激活” .我终于通过 Twitter 得到了答案,我很快就会在这里发布以更好地说明它。