Как использовать группировку с использованием Collection View MVVM? - PullRequest
3 голосов
/ 17 ноября 2011

Я довольно новичок в MVVM, и недавно я начал проект по очистке моего кода, и постепенно я перемещаю все в Model и ViewModel.

Моя проблема, как выиспользовать группировку с использованием Collection View без какого-либо кода позади?Я подумал, что понял это, прочитав ответы на подобные вопросы здесь, в Stackoverflow, но все еще не могу заставить его работать.Возможно, глупая ошибка, но я был бы очень признателен, если бы кто-нибудь взглянул на мой код и дал мне знать, что они думают.Все отзывы - отличные отзывы, я действительно хочу стать хорошим программистом:)

Список, кстати, имеет тип ObservableCollection в классе Menu.

             <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;
        }
    }

1 Ответ

2 голосов
/ 17 ноября 2011

Я предполагаю, что ваша проблема в том, что данные не отображаются в вашем 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, предполагая, что я не расточил свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...