使用带有ApplicationBarIconButton的mvvm-light CustomEvent触发器

时间:2011-01-27 23:36:57

标签: windows-phone-7 mvvm-light

按钮下方的示例代码将触发打开第二页。

            <Button x:Name="btnSelect" Content="Select" HorizontalAlignment="Right" Margin="0,8,20,6" 
                Grid.Row="2" Width="200">
            <Custom:Interaction.Triggers>
                <Custom:EventTrigger EventName="Click">
                    <GalaSoft_MvvmLight_Command:EventToCommand x:Name="btnSelectClicked" 
                                                               Command="{Binding SelectEventPageCommand, Mode=OneWay}"/>
                </Custom:EventTrigger>
            </Custom:Interaction.Triggers>
        </Button> 

    public partial class MainPage : PhoneApplicationPage
{
    // Constructor
    public MainPage()
    {
        InitializeComponent();
    }


    private void ContentGrid_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        Messenger.Default.Register<GoToPageMessage>(this, (action) => ReceiveMessage(action));
    }

    private object ReceiveMessage(GoToPageMessage action)
    {
        StringBuilder sb = new StringBuilder("/Views/");
        sb.Append(action.PageName);
        sb.Append(".xaml");
        NavigationService.Navigate(
           new System.Uri(sb.ToString(),
                 System.UriKind.Relative));
        return null;
    }
}

http://galasoft.ch/mvvm/getstarted/

有人可以建议我如何使用ApplicationBarIconButton做同样的事情吗?我收到错误属性'触发器'无法附加到ApplicationBarIconButton类型的元素。

或者我应该只使用CodeBehind?

    <phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="False">
        <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1">

        </shell:ApplicationBarIconButton>

    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

2 个答案:

答案 0 :(得分:2)

Yeap ApplicationBar与Silverlight中的其他控件有点不同。我可以使用这个使用ICommand: http://blog.humann.info/post/2010/08/27/How-to-have-binding-on-the-ApplicationBar.aspx

或Silverlight工具包,它提供了一些扩展,如本答案中所述: How to add an application bar to a user control in wp7但我从未使用它。

答案 1 :(得分:0)

ApplicationBar是由操作系统提供的服务,即不是框架的一部分,并且不支持您已经发现的Triggers。如上所述,有一个数字解决方案为此问题提供解决方法。

或者,您可以使用Silverlight Windows Phone Toolkit中的ApplicationBarButtonCommandApplicationBarButtonNavigation行为。如果您需要,创建ApplicationBarMenuCommand是一项非常简单的任务。在您的情况下,要使用ApplicationBar按钮导航到某个页面,ApplicationBarButtonNavigation行为就可以解决这个问题。