我的主页面和HubSection标题中有一个集线器控件,当我点击按钮时,我无法触发该元素,但是当我将XAML移动到DataTemplate时,如果触发该事件。你可以向我解释为什么会这样,我是否需要在HubSection.Header中启用某些内容以便事件可以触发?
这是不会触发的代码:
<HubSection >
<HubSection.Header>
<StackPanel >
<TextBlock
Text="{Binding
WhatToWatch.Name,
Mode=OneWay}" />
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Tapped">
<core:InvokeCommandAction
Command="{Binding ViewMoreCommand}"
CommandParameter="{Binding WhatToWatch.Name}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</StackPanel>
</HubSection.Header>
<DataTemplate>
<controls:RowGridView
ItemsSource="{Binding
WhatToWatch.Data,
Mode=TwoWay}" />
</DataTemplate>
</HubSection>
以下是触发事件的代码:
<DataTemplate>
<StackPanel >
<StackPanel >
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Tapped">
<core:InvokeCommandAction Command="{Binding ViewMoreCommand}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
<TextBlock
Text="{Binding
WhatToWatch.Name,
Mode=OneWay}" />
</StackPanel>
<controls:RowGridView
ItemsSource="{Binding
WhatToWatch.Data,
Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</HubSection>
它的代码相同,但在第二个核心:InvokeCommandAction动作在DataTemplate中,这是什么允许XAML调用事件?为什么会这样?
答案 0 :(得分:1)
您必须对拥有ViewModel的页面进行引用。
为您的页面设置一个名称,例如:&#34; pageRoot&#34; 然后将行为更改为
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Tapped">
<core:InvokeCommandAction Command="{Binding DataContext.ViewMoreCommand, ElementName=pageRoot}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>