Используйте пользовательский триггер mvvm-light с ApplicationBarIconButton - PullRequest
0 голосов
/ 28 января 2011

Пример кода ниже для кнопки инициирует открытие второй страницы.

            <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 ]

2 голосов
/ 28 января 2011

Yeap ApplicationBar немного отличается от других элементов управления в Silverlight.Я смог использовать ICommand с помощью этого: http://blog.humann.info/post/2010/08/27/How-to-have-binding-on-the-ApplicationBar.aspx

или набора инструментов Silverlight, который предлагает некоторые расширения, как указано в этом ответе: Как добавить панель приложения в элемент управления пользователя в wp7 но я никогда не использовал его.

0 голосов
/ 28 января 2011

ApplicationBar - это сервис, который предоставляется операционной системой, то есть не является частью Framework, и не поддерживает Triggers, как вы уже обнаружили. Как уже упоминалось выше, существует ряд решений, которые предоставляют обходные пути для этой проблемы.

Кроме того, вы можете использовать поведения ApplicationBarButtonCommand и ApplicationBarButtonNavigation из Silverlight Windows Phone Toolkit . Это достаточно простая задача - создать свой ApplicationBarMenuCommand, если он вам нужен. В вашем случае, для использования кнопки ApplicationBar для перехода на страницу, поведение ApplicationBarButtonNavigation поможет.

...