【问题标题】:Presort Silverlight DataGrid in MVVM在 MVVM 中预排序 Silverlight DataGrid
【发布时间】:2011-11-23 22:58:48
【问题描述】:

我正在将DataGrid 绑定到ObservableCollection 我在计时器和网格更新上更新集合,这正是我想要的。

但是,即使我可以对初始种群的集合进行排序 - 当我添加新项目时,它们会移到底部。用户可以对网格进行排序,然后看起来不错。

我想在初始化时“强制”网格按特定列排序。可以用 XAML 还是以某种 MVVM 方式完成?

编辑 只是为了提供更多细节。这是邮件客户端主屏幕。我有轮询数据的服务,如果新邮件到达 - 它会被附加到集合中。由于几个原因,此时排序是不可取的。首先,这是object 的列表。其次,用户可以决定使用DataGrid按其他列排序

将网格设置为按我最初想要的列(接收时间)排序并让用户按任何列排序,同时在新项目到达时保留此顺序。

【问题讨论】:

    标签: silverlight xaml mvvm datagrid


    【解决方案1】:

    您应该将 ObservableCollection 包装在集合视图中。通常,您会将集合包装在 CollectionViewSource 或 PagedCollectionView 中。 CollectionViewSource 可以在 XAML 中以声明方式使用,但不能从 ViewModel 控制。但是,您可以将您的集合包装在 PagedCollectionView 中,并从您的 ViewModel 中公开它。这篇 MSDN 文章应该对您有所帮助:http://msdn.microsoft.com/en-us/library/dd833072(v=vs.95).aspx。集合视图是非常强大的工具,它将帮助您优雅地弥合 View 和 ViewModel 之间的差距。希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      [编辑]编辑答案以对应解决方案

      您可以尝试通过将 Collection 包含在 collectionView 中来添加 SortDescriptions。例如。

      <CollectionViewSource Source="{Binding ObservableCollection}" x:Key="Data" >
          <CollectionViewSource.SortDescriptions> 
             <scm:SortDescription PropertyName="City" />
          </CollectionViewSource.SortDescriptions> 
      </CollectionViewSource>
      

      然后在您的 ItemsSource 中设置以下绑定。

      ItemsSource={Binding Source={StaticResource Data}}
      

      【讨论】:

      • 对不起。现在它在 Silverlight 4 中的工作方式是您确实将它包装在 CollectionViewSource 中。这可以在 XAML 或您的 viemodel 中完成。我已经对其进行了测试以确保这将起作用。 &lt;CollectionViewSource Source="{Binding ObservableCollection}" x:Key="Data" &gt; &lt;CollectionViewSource.SortDescriptions&gt; &lt;scm:SortDescription PropertyName="City" /&gt; &lt;/CollectionViewSource.SortDescriptions&gt; &lt;/CollectionViewSource&gt;把上面的内容放到你的page/usercontrol的资源中,然后你就可以设置你的ItemsSource了ItemsSource="{Binding Source={StaticResource Test}}"
      • Source={StaticResource Test} 应该是 Source={StaticResource Data}
      【解决方案3】:

      只需在您的 ViewModel 中进行排序,无论您在哪里更新集合,都可以通过计时器对其进行排序。事实上,当您对集合进行排序时,如果您在 View/Xaml 中正确绑定到数据上下文(视图模型),则视图应该重新绑定。

      任何时候你在视图模型中更新一个 Observable 集合,任何绑定到它的东西都会被更新。

      【讨论】:

      • 查看我的编辑。我真的很想设置网格。这甚至会直观地向他们显示它是按此列排序的
      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 2011-06-12
      • 2011-12-24
      • 2010-09-18
      • 2013-04-18
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      相关资源
      最近更新 更多