是否可以在数据模板中显式使用CollectionViewSource?通常情况下,我们会将CollectionViewSource与模板中的资源放在一起,但我们的模型不允许这样做,因为collectionviewsource的“源”是树中此级别的DataContext的属性,这意味着需要有一个实例在这个级别。把它放在资源的根部意味着只有一个实例。我们也不能简单地在外层使用分组,因为这些项目不存在,直到你处于层次结构的下层,并且并非所有的同胞都拥有这个属性。因此,从逻辑上讲,我们在DataTemplate中实例化CollectionViewSource(在本例中为HierarchicalDataTemplate,但这无关紧要)。你可以在DataTemplate中使用CollectionViewSource吗?
具体而言,我们试图在此特定节点级别上进行特定排序。我们唯一的选择是在ViewModel本身进行排序,但由于我们使用的ObservableCollections本身不支持排序,所以这成为一种痛苦。实际上,我们在该主题上看到的每篇文章都声明,您应该恰好使用CollectionViewSource,因此就是这个问题。
例如,这个工程......
<HierarchicalDataTemplate x:Key="CategoryTemplate"
ItemTemplate="{StaticResource TreeViewSymbolTemplate}"
ItemsSource="{Binding Symbols}">
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
</HierarchicalDataTemplate>
但这并不...
<HierarchicalDataTemplate x:Key="CategoryTemplate"
ItemTemplate="{StaticResource TreeViewSymbolTemplate}">
<HierarchicalDataTemplate.ItemsSource>
<Binding>
<Binding.Source>
<CollectionViewSource Source="{Binding Symbols}" />
</Binding.Source>
</Binding>
</HierarchicalDataTemplate.ItemsSource>
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
</HierarchicalDataTemplate>
像它会在我看来,但事实并非如此。同样,我们不能将CollectionViewSource与数据模板放在同一级别,因为每个模板需要一个实例,因为每个模板都有自己的一组项目(尽管它们都将共享排序条件。)
M
真的想在这里更合适得到一个答案,做它的原始的方式,或者即使CollectionViewSource是DataTemplate中的资源部分内。 – 2010-12-29 12:07:41
实际上,我发现了一个更简单的方法来做到这一点,我真的很喜欢...我只是将CollectionViewSource移动到一个转换器中,并使用它来设置返回值。现在我们只是在装订时“新”起来,因为这是我们需要做的,但从技术上讲,我们可以返回我们在需要时参考的预先水合的。如果你问我并像冠军一样工作,该死的太漂亮了! – MarqueIV 2011-01-02 07:18:15
我会研究一下。谢谢。 – 2011-01-04 09:10:04