collection 的 GridView 过滤器按钮

GridView Filter buttons for collection

我目前在 collection 视图上进行数据绑定以显示我的所有按钮。

但是由于我的 collection 列表中有超过 24 个项目,我想在同一页面上添加四个按钮(开胃菜、早餐、午餐、晚餐)并根据我点击的按钮进行过滤。这样我一次只显示其中的几个选择。

我应该在 ViewModel 中处理这个吗?或者这应该是综合浏览量的责任吗?

菜单项class:

public enum type
{
    Appetizer,
    Breakfast,
    Lunch,
    Dinner
};
class MenuItem
{
 //stuff
}

菜单项页面:

    public sealed partial class MenuItemsPage : Page
    {
        public MenuItemsPage()
        {
            this.InitializeComponent();       
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            string tableName = e.Parameter as string;
            this.DataContext = new MenuPageVM(tableName);  //this returns List<MenuItem> 24 items. All 4 types of MenuItems    
        }
    }
}

XAML:

<CollectionViewSource x:Key="MenuItemsCollectionViewSource" Source="{Binding MenuItems}"/>
<GridView   SelectionMode="None" 
            x:Name="menuGrid" ItemsSource="{Binding Mode=OneTime, Source={StaticResource MenuItemsCollectionViewSource}}" Margin="256,113,320,184"
                    ItemTemplate="{StaticResource MenuButtonTemplate}"/>

在视图模型中保留一个 属性 AllItems。单击按钮时,可以调用视图模型中的方法来进行过滤。

public void Filter(type filterType)
{
    MenuItems.Clear();
    foreach(var item in AllItems)
    {
       if(item.type == filterType)
       {
          MenuItems.Add(item);
       }
    }
}

仅当 MenuItems 是 ObservableCollection 时,更改才会反映在 UI 中。