4

CollectionViewSource からデータを取得する ListBox を設定しようとしています。私がやりたいことは、基になるデータ ソースを更新すると、ListBox も更新されることです。私のXamlは次のようになります...

<Window.Resources>
    <ObjectDataProvider x:Key="AppTests" ObjectType="{x:Type Application:AppTestProvider}" MethodName="GetAppTests" />
    <CollectionViewSource x:Key="cvs" Source="{StaticResource AppTests}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="Priority" Direction="Ascending" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</Window.Resources>

<Grid>
    <ListBox x:Name="TestList" ItemsSource="{Binding Source={StaticResource cvs}}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding TestName}" />                    
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

これにより、データが正常に表示されますが、基になるデータを変更するとcvs.View.Refresh()、コード ビハインドでメソッドを呼び出すまで、変更はグリッドに表示されません。

これを「観察可能」にして、変更が自動的に行われるようにするにはどうすればよいですか?

注: CVS を使用する理由は、基になるオブジェクトのプロパティに基づいてリストを並べ替えるためです。

4

2 に答える 2

1

asのList<T>代わりに を使用していると思われます。ObservableCollection<T>underlying source collectionCollectionViewSource

ICollectionView基になるコレクションがそれを実装している場合、イベントのfilter, sort, or group伝播とともにコレクションに機能を提供します。INotifyCollectionChanged

さらに、クラス内のrefreshいずれかのコレクションを手動で呼び出す必要がある場合、コレクションが必要な場合、または.Net4.5で導入されたものを使用できます。property changeTRefreshICollectionViewLiveShaping

両方のアプローチについて、こちらの回答を参照してください - ICollectionView を自動的に更新します

于 2013-07-29T08:39:13.503 に答える