1

我有两节课,

public class BookItem
{
    public string BookID            { get; set; }
    public string ItemID            { get; set; }
    public Item Item                { get; set; }   
    public ItemType Type            { get; set; }
    public string ParentID          { get; set; }
    public string BoxID             { get; set; }
    public string StyleID           { get; set; }
    public string NotesID           { get; set; }
    public string Code_XAML         { get; set; }
    public string Description_XAML      { get; set; }
    public CompositeCollection SubItems { get; set; }
}

public class Item : ClaunchBaseClass
{
    public string ItemID        { get; set; }
    public int    Type          { get; set; }
    public string Code          { get; set; }
    public string Description   { get; set; }
    private BookList _books = new BookList();
    public BookList Books       { get {return _books;} set { _books = value; }}
}

我创建了以下 XAML:

<pre>    
<TreeView Name="tvList" Grid.Row="2" MouseDoubleClick="tvList_MouseDoubleClick">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="x:Type j:BookItem" ItemsSource="{Binding SubMenu}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="50"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Item.Code}" Grid.Column="0" />
                <TextBlock Text="{Binding Item.Description}" Grid.Column="1"/>
            </Grid>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
<code>

此 XAML 将树视图项目绑定到书籍项目的集合并显示项目子类的描述和代码,树视图填充并正确显示,但现在我想在 Item.Code 或 Item.Description 上对树视图进行排序,并尝试了以下没有结果:

<pre> 
var bookItemsSort = CollectionViewSource.GetDefaultView(_bookItemList) as ListCollectionView;
tvList.ItemsSource = _bookItemList;         //bind the book items to the treeview
bookItemsSort.SortDescriptions.Clear();
bookItemsSort.SortDescriptions.Add(new SortDescription(sort, Ascending));
<code>

我已经让这段代码在其他树视图上正常工作,所以我只能猜测这是绑定到子类的问题。

4

3 回答 3

2

虽然这里的答案为我的问题提供了部分答案,但没有一个给出我需要的答案。

这个问题最明智的解决方案是为这个对象类型编写我自己的对象比较器并对底层列表进行排序,然后将新列表重新绑定到树视图。这允许在任何嵌套级别比较子类,我无法以任何其他方式工作:)

于 2012-04-23T13:44:38.797 回答
0

您需要获取每个子列表的默认视图,并对其应用 CollectionViewSource 排序。您发布的代码仅影响顶级项目。

于 2012-04-16T17:00:30.283 回答
0

将您绑定TreeView.ItemsSource到 DefaultView。SortDescriptions 不会改变你的 DataList,只会改变它的 View。

tvList.ItemsSource = bookItemsSort;

请参阅 Bea Stollnitz 博客:如何对层次结构进行排序?

于 2012-04-16T16:57:16.370 回答