3

私はMVVMにかなり慣れていません。最近、コードビハインドをクリーンアップするプロジェクトを開始し、少しずつすべてをModelとViewModelに移動しています。

私の問題は、今、コードの背後にないコレクションビューを使用してグループ化をどのように使用するかです。Stackoverflowで同様の質問への回答を読んだ後、私はそれを理解したと思いましたが、それでも機能させることができません。おそらくばかげた間違いですが、誰かが私のコードを見て、彼らの考えを教えてくれたらとてもありがたいです。すべてのフィードバックは素晴らしいフィードバックです、私は本当に良いプログラマーになりたいです:)

このリストは、MenuクラスのObservableCollectionタイプです。

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

1 に答える 1

2

あなたの問題は、データがリストボックスに表示されないことだと思いますか?プログラムでグループ化を追加し_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その後、コードをバフしていないと仮定して、リソースを廃止できます。

于 2011-11-16T21:47:59.323 に答える