XAML Hub Control Windows 8.1 Universal,InvokeCommandAction未触发

时间:2014-08-04 10:26:55

标签: c# xaml windows-8.1 mvvm-light win-universal-app

我的主页面和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调用事件?为什么会这样?

1 个答案:

答案 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>