是否可以在數據模板中顯式使用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