BindableApplicationBar不会触发点击事件

时间:2013-10-02 09:03:52

标签: c# xaml windows-phone-8 mvvm-light

我需要一个可以绑定到命令和点击事件的ApplicationBar(UI相关的东西需要点击事件,我无法在我的模型中处理它们。)

我正在尝试使用NuGet中的BindableApplicationBar,命令绑定工作正常,但无法获得点按事件。

请注意,我正在更改DataContext以使绑定工作,但Tap事件必须在代码隐藏中进行管理(我不知道这可能是我问题的主要原因!)

这是酒吧的xaml:

<bindableApplicationBar:Bindable.ApplicationBar>
    <bindableApplicationBar:BindableApplicationBar>
        <bindableApplicationBar:BindableApplicationBarButton
            Text="{Binding MainSearchText}"
            IconUri="Assets/AppBar/feature.search.png"
            Command="{Binding NavigateCommand}"
            Name="SearchBarButton" />
        <bindableApplicationBar:BindableApplicationBarButton
            Text="{Binding Path=LocalizedResources.AppBarSettingsText, Source={StaticResource LocalizedStrings}}"
            IconUri="Assets/AppBar/feature.settings.png"
            Tap="SettingsButton_OnTap" />
        <bindableApplicationBar:BindableApplicationBar.MenuItems>
            <bindableApplicationBar:BindableApplicationBarMenuItem
                Text="{Binding Path=LocalizedResources.AppBarAboutText, Source={StaticResource LocalizedStrings}}"
                Tap="Info_OnTap" />
        </bindableApplicationBar:BindableApplicationBar.MenuItems>
    </bindableApplicationBar:BindableApplicationBar>
</bindableApplicationBar:Bindable.ApplicationBar>

这是我在.xaml.cs文件中的处理程序之一:

private void Info_OnTap(object sender, GestureEventArgs e)
{
    _about.Show();
    Debug.WriteLine("INFO ON_TAP");
}

当我点击MenuItem时,没有写入“INFO ON_TAP”行。

它出了什么问题?

2 个答案:

答案 0 :(得分:0)

这不是你如何使用BindableApplicationBar。 BindableApplicationBarButton继承自FrameworkElement(因此具有Tap事件)以支持DataContext和Bindings; Tap事件没有被触发,因为没有触发BindableApplicationBarButton,屏幕上也没有BindableApplicationBarButton - 这只是一个创建ApplicationBarIconButton的包装器,但是没有将Tap事件处理程序传递给它(顺便说一句,ApplicationBarIconButton只有一个)事件 - 点击)。 BindableApplicationBarMenuItem也是如此。 BindableApplicationBar最适合命令。

在源代码的评论中查看更多内容:BindableApplicationBar @ codeplex

以下是(部分)您的选择:

  • 使用BindableApplicationBarButton的Command属性来响应按钮点击
  • 在xaml中定义BindableApplicationBar后,挂钩到它后面的代码中创建的ApplicationBarIconButtons的Click事件
  • 使用BindableApplicationBar代码(开源)并更改它以获得场景中的最佳体验

答案 1 :(得分:0)

您可以尝试使用Cimbalino Toolkit AppBar ......功能更强大,更易于使用!

例如:

 <i:Interaction.Behaviors>
        <cimbalinoBehaviors:MultiApplicationBarBehavior 
            SelectedIndex="{Binding SelectedIndex, ElementName=MainInfo, Converter={StaticResource HomeMenuConverter}}" >

            <cimbalinoBehaviors:ApplicationBar Opacity="0.5"  
                                               IsMenuEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}">


                <cimbalinoBehaviors:ApplicationBarIconButton 
                    IsVisible="{Binding IsAuthenticated}"
                    IsEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}"
                    Command="{Binding GetFavorites, Mode=OneTime}" 
                    IconUri="/Assets/appbar.sync.rest.png" Text="{Binding Labels.Translation.Refresh, Source={StaticResource LabelsManager}}" />
                <cimbalinoBehaviors:ApplicationBarIconButton 
                    IsVisible="{Binding SelectionMode, Converter={StaticResource NegativeBooleanConverter}}"
                    IsEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}"
                    Command="{Binding SetSelectionMode, Mode=OneTime}" 
                    IconUri="/Assets/ApplicationBar.Select.png" Text="{Binding Labels.Translation.Select, Source={StaticResource LabelsManager}}" />
                <cimbalinoBehaviors:ApplicationBarIconButton 
                    IsVisible="{Binding SelectionMode}"
                    IsEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}"
                    Command="{Binding DeleteFavorites, Mode=OneTime}" 
                    IconUri="/Assets/ApplicationBar.Delete.png" Text="{Binding Labels.Translation.Delete, Source={StaticResource LabelsManager}}" />

                <cimbalinoBehaviors:ApplicationBarIconButton 
                    IsVisible="{Binding SelectionMode}"
                    IsEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}"
                    Command="{Binding SetSelectionMode, Mode=OneTime}" 
                    IconUri="/Assets/ApplicationBar.Cancel.png" Text="{Binding Labels.Translation.Cancel, Source={StaticResource LabelsManager}}" />

            </cimbalinoBehaviors:ApplicationBar>
        </cimbalinoBehaviors:MultiApplicationBarBehavior>
    </i:Interaction.Behaviors>

https://github.com/Cimbalino/Cimbalino-Phone-Toolkit