在Windows 10 Universal App中将命令绑定到集线器部分标题

时间:2015-09-05 04:50:49

标签: mvvm win-universal-app

假设我有一个中心页面(HubPageView)和该页面内的几个中心部分,例如。

<Hub Header="{Binding AppName}">
   <HubSection IsHeaderInteractive="True" 
               Header="Section 1">
      ...
   </HubSection>
   ...
</Hub>

当渲染时,上面的节目显示为“第1节看到更多”,我认为如果用户点击“查看更多”应用程序应该导航到,例如,Section1PageView。

我正在努力遵循MVVM模式,所以我想将点击绑定到命令(NavigateToSection1Command)而不是使用ItemClick事件 - 我该如何实现?

1 个答案:

答案 0 :(得分:1)

Hub类有一个SectionHeaderClick事件,您可以将事件附加到EventTriggerBehavior并将命令绑​​定到该事件。

<Page xmlns:i="using:Microsoft.Xaml.Interactivity"
    xmlns:core="using:Microsoft.Xaml.Interactions.Core"

    <Hub Header="{Binding AppName}">
        <i:Interaction.Behaviors>
            <core:EventTriggerBehavior EventName="SectionHeaderClick">
                <core:InvokeCommandAction Command="{Binding NavigateToSectionCommand}" />
            </core:EventTriggerBehavior>
        </i:Interaction.Behaviors>
    </Hub>
</Page>

SectionHeaderClick是MS为我们与Hub Header交互的事件,但它的工作方式将使MVVM的生活变得更加艰难。你看,该事件传递了被点击作为参数的Section对象。您将通过附加命令来丢失它,因为没有内置的方法将事件参数传递给命令,并且无法分辨命令的哪个部分被触发。 话虽这么说,我认为在HubSection的标题中放置一个Button或TextBlock,并将EventTriggerBehavior附加到它的Click事件更适合您的需求。

Ps:您必须添加对行为SDK的引用。转到添加参考&gt;通用Windows&gt;扩展,然后检查Behaviors SDK(XAML)