我建议三个选项。如果您有四个或更少的过滤器,您可以将它们作为按钮添加到您的应用程序栏中。然后,您可以在单击按钮时更改按钮的图像和文本,以指示用户是否会获得这些提要。
示例 1
<phone:PhoneApplicationPage.Resources>
<shell:ApplicationBar x:Name="ApplicationBarHaberler" IsVisible="True" IsMenuEnabled="True" ForegroundColor="SeaShell" BackgroundColor="DarkGreen">
<shell:ApplicationBarIconButton IconUri="Images/appbar_NoPolitics.png" Text="Politics" Click="OnPoliticsClicked"/>
<shell:ApplicationBarIconButton IconUri="Images/appbar_NoEconomy.png" Text="Economy" Click="OnEconomyClicked"/>
<shell:ApplicationBarIconButton IconUri="Images/appbar_NoSport.png" Text="Sport" Click="OnSportClicked"/>
private const int SportsButtonIndex = 2;
private void OnSportClicked(object sender, EventArgs e)
{
ViewModel.FilteringSports = !ViewModel.FilteringSports;
if(ViewModel.FilteringSports)
{
(ApplicationBar.Buttons[SportsButtonIndex] as ApplicationBarIconButton).IconUri = new Uri("Images/appbar_FilterSports", UriKind.Relative);
}
else
{
(ApplicationBar.Buttons[SportsButtonIndex] as ApplicationBarIconButton).IconUri = new Uri("Images/appbar_NoSports", UriKind.Relative);
}
}
第二个想法是 Mike Dimmick 建议的,并更改 MenuItems 的文本以指示您是否正在过滤。点击事件看起来类似于上面的内容。
第三个(也是我最喜欢的)是有一个过滤器页面。您将有一个“过滤器”图标按钮,单击该按钮将导航到包含所有过滤器的 FilterPage。这也为您提供了稍后添加更多过滤器的优势。当您导航回该页面时,您将过滤提要。
示例 3
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if ((e.NavigationMode == NavigationMode.Back) && ChangingFilter)
{
Filter();
ChangingFilter = false;
}
}
private void OnFilterButtonClick(object sender, EventArgs eventArgs)
{
ChangingFilter = true;
NavigationService.Navigate(new Uri("/FilterPage.xaml", UriKind.Relative));
}
FilterPage 将列出所有带有 CheckBox 的过滤器,以指示用户是否要查看它们。