我是MVVM的新手,我最近开始了一个项目清理我的代码隐藏,一点一点地将所有东西都移到Model和ViewModel。
我的问题是,现在,如何在没有任何代码的情况下使用Collection View进行分组?在Stackoverflow上阅读类似问题的答案后,我以为我已经弄明白了,但我还是无法让它工作。可能是一个愚蠢的错误,但如果有人能看看我的代码并让我知道他们的想法,我将非常感激。所有反馈都是很好的反馈,我真的想成为一名优秀的程序员:)
列表是菜单类中ObservableCollection类型的btw。
<CollectionViewSource x:Key="foods" Source="{Binding Items}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Category"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<ListBox x:Name="selectedMenuItem" Foreground="White" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding Source={StaticResource foods}}"
DisplayMemberPath="Name" Background="{x:Null}" BorderThickness="0">
<ListBox.GroupStyle>
<x:Static Member="GroupStyle.Default"/>
</ListBox.GroupStyle>
</ListBox>
private CollectionViewSource _items;
private Menu _menu = new Menu();
public ICollectionView Items
{
get
{
if (_items == null)
{
_items = new CollectionViewSource {Source = new ObservableCollection<MenuItem>(_menu.MyMenu)};
}
return _items.View;
}
}
答案 0 :(得分:2)
我假设你的问题是你的ListBox中没有显示数据?尝试以编程方式将您的分组添加到_items
并将ListBox.ItemsSource直接绑定到Items
:
public ICollectionView Items
{
get
{
if (_items == null)
{
_items = new CollectionViewSource {Source = new ObservableCollection<MenuItem>(_menu.MyMenu)};
_items.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
}
return _items.View;
}
}
<ListBox x:Name="selectedMenuItem" Foreground="White" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding Items}"
DisplayMemberPath="Name" Background="{x:Null}" BorderThickness="0">
<ListBox.GroupStyle>
<x:Static Member="GroupStyle.Default"/>
</ListBox.GroupStyle>
</ListBox>
然后,您可以取消使用foods
资源,假设我没有删除我的代码。