如何将可观察的集合保存在列表框中?

时间:2010-07-04 05:36:00

标签: wpf listview frameworks entity

我有以下内容从实体框架4获取数据:

IQueryable<Exam> examsQuery = 
   entities.CreateQuery<Exam>("[Exams]").Include("Course");
exams = 
   new EntityObservableCollection<Exam>(entities, "Exams", examsQuery);

在我的viewmodel中,我有以下代码:

public IEnumerable<Exam> Exams { get { return exams; } }

在我的XAML中有以下内容:

<ListView ItemsSource="{Binding Exams}" SelectedItem="{Binding SelectedExam}" 
   SelectionChanged="ListViewSelectionChanged">
      <ListView.View>
          <GridView>
              <GridViewColumn DisplayMemberBinding="{Binding Code}" Header="ExamCode" Width="250"/>
              <GridViewColumn DisplayMemberBinding="{Binding Desc}" Header="Desc" Width="150"/>
              <GridViewColumn DisplayMemberBinding="{Binding Course.Code}" Header="Course" Width="150"/>
           </GridView>
       </ListView.View>
</ListView>

对我来说,问题是首先我希望:

1)ListView在ExamCode列上排序 2)如果例如从外部更改ExamCode,我希望它保持排序。

是否有一种简单的方法可以始终对列表视图进行排序?我环顾四周,根本无法找到解决方案。

由于

1 个答案:

答案 0 :(得分:0)

使用ICollectionView:

public ICollectionView Exams 
{ 
    get 
    { 
         if (examsView == null)
         {
             examsView = CollectionViewSource.GetDefaultView(exams); 
             examsView.SortDescriptions.Add(new SortDescription("Code",  ListSortDirection.Descending)); // your sort here
         }

         return examsView;
    } 
}