GridView过滤器按钮用于收集

时间:2015-03-31 06:34:16

标签: c# wpf xaml gridview mvvm

我目前有数据绑定工作在集合视图上以显示我的所有按钮。

然而,由于我的收藏清单中有超过24个项目,我想在同一页面上添加四个按钮(开胃菜,早餐,午餐,晚餐),并根据我点击的那个过滤。这样我一次只显示其中的一些选项。

我应该在ViewModel中处理这个吗?或者这应该是对网页浏览的责任吗?

MenuItem类:

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

MenuItemsPage:

    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}"/>

1 个答案:

答案 0 :(得分:1)

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

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

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