2012-04-16 1 views
1

У меня есть два класса,Как сортировать древовидное представление WPF, которое имеет элементы, связанные с свойствами подкласса Item?

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 связывает элементы TreeView в коллекцию книжных элементов и отображает описание и код этого пункта подкласса , treeview заполняет и отображает правильно, но теперь я хочу сортировать древовидную структуру на 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> 

У меня этот код работает правильно для других древовидных представлений, поэтому я могу только догадываться, что это проблема с привязкой к подклассу.

ответ

2

Хотя ответы здесь предоставили частичные ответы на мой вопрос, ни один из них не дал ответ, который мне нужен.

Наиболее разумным решением этой проблемы было написать мой собственный объектный сопоставитель для этого типа объекта и отсортировать базовый список, а затем перевязать новый список с деревом. Это позволило сравнить сублицензии на любом вложенном уровне, который я не мог сделать другим:

0

Привяжите TreeView.ItemsSource к DefaultView. SortDescriptions не изменяет ваш DataList, только вид его.

tvList.ItemsSource = bookItemsSort; 

См Беа Stollnitz блог: How can I sort a hierarchy?

0

Вы должны получить представление по умолчанию для каждого суб-списка и применить CollectionViewSource сортировку к нему. Код, который вы опубликовали, влияет только на элементы верхнего уровня.