1

エンティティ フレームワークを使用してデータを取得しています。コレクション ビュー ソースをコンボ ボックスにバインドして、データを表示しようとしています。CollectionViewSource の定義は次のとおりです。

<CollectionViewSource x:Key="aSICodesControlledEnvironmentViewSource" d:DesignSource="{d:DesignInstance {x:Type AsiEF:ASICodesControlledEnvironment}, CreateList=True}">

AsiEF は、エンティティ フレームワーク アセンブリです。コンボ ボックスの XAML は次のとおりです。

<ComboBox x:Name="cmbControlledEnvLast30" Margin="480,20,0,0" DisplayMemberPath="ContEnvDesc"  SelectedValue="ContEnvDesc"  Width="150"  FontSize="14" 
      ItemsSource="{Binding Source={StaticResource aSICodesControlledEnvironmentViewSource}}">
<CollectionViewSource>
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="DisplayOrder" />
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</ComboBox>

ご覧のとおり、フィールド DisplayOrder でデータを並べ替えようとしていますが、そのフィールドはコンボ ボックスに表示されていませんが、CollectionViewSource はそのフィールドでデータを並べ替えることができるはずだと思います。

しかし、これが失敗するのは、データを取得して、ユーザー コントロールのロードされたイベントでコレクション ビュー ソースのソースに割り当てようとする場合です。

ComboBoxSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("aSICodesControlledEnvironmentViewSource")));
ComboBoxSource.Source = asiContext.ASICodesControlledEnvironments;

CollectionViewSource オブジェクト ComboBoxSource の Source プロパティを割り当てようとすると、2 行目でハングします。asiContext は、AsiEF の ObjectContext です。スローされるエラーは、「ItemsSource を使用する前に、Items コレクションを空にする必要があります」です。申し訳ありませんが、私たちが間違っていることがわかりません。XAML から ItemsSource の ComboBox の割り当てを削除しようとしましたが、うまくいきません。では、どこが間違っているのでしょうか。

4

1 に答える 1

2

SortDescriptionsinCollectionViewSource定義で宣言するべきだと思います

<CollectionViewSource x:Key="aSICodesControlledEnvironmentViewSource"
                      d:DesignSource="{d:DesignInstance {x:Type AsiEF:ASICodesControlledEnvironment}, CreateList=True}">
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="DisplayOrder" />
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

CollectionViewSourceから追加を削除しComboBoxます。ComboBox.Itemsこれは、後でComboBox.ItemsSourceバインディング時に例外がスローされると解釈されます。

<ComboBox x:Name="cmbControlledEnvLast30"
          ItemsSource="{Binding Source={StaticResource aSICodesControlledEnvironmentViewSource}}">

</ComboBox>
于 2013-05-17T17:11:20.643 に答える