2017-03-09 61 views
0

我有我的WPF/VB Treeview工作得很好,然後我試圖添加生活排序和萬物南下。現在當我運行我的應用程序時,沒有在TreeView控件中顯示。下面是我所做的:排序在HierarchicalDataTemplate不工作

添加該轉換器:

Public Class CollectionViewSorter 
Implements IValueConverter 

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert 
    Dim collection As System.Collections.IList = TryCast(value, System.Collections.IList) 
    Dim view As New ListCollectionView(collection) 
    Dim sort As New SortDescription(parameter.ToString(), ListSortDirection.Ascending) 
    view.SortDescriptions.Add(sort) 
    Return view 
End Function 
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack 
    Return Nothing 
End Function 
End Class 

在我有這樣的Window.Resources:

<CollectionViewSource 
    x:Key="cvs" 
    IsLiveSortingRequested="True"> 
</CollectionViewSource> 
<local:CollectionViewSorter x:Key="Sorter" /> 

這:

<TreeView.ItemTemplate> 
<HierarchicalDataTemplate 
     ItemsSource="{Binding Path=ChildNodes, Source={StaticResource cvs}, Converter={StaticResource Sorter}, ConverterParameter=Name}"> 
    <TextBlock Text="{Binding Path=Name}" /> 
</HierarchicalDataTemplate> 

最後,我是德將代碼隱藏的CollectionViewSource.Source細化爲:

Dim cvs As CollectionViewSource = CType(TryFindResource("cvs"), CollectionViewSource) 
cvs.Source = Nodes 

上面出現了什麼問題?

編輯: 每低於我的意見,我刪除了轉換器的膽量,因此,現在是這樣的:

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert 
    Dim collection As IList = TryCast(value, IList) 
    Return collection 
End Function 

和TreeView控件仍然是空的。因此,我的結論是,轉換器是問題的根源,但我不知道如何解決。

回答

0

假設Nodes是一個屬性。

綁定在XAML源這樣的:

<CollectionViewSource 
      x:Key="cvs" 
      Source="{Binding Nodes}" 
      IsLiveSortingRequested="True"/> 

刪除這兩條線:

Dim cvs As CollectionViewSource = CType(TryFindResource("cvs"), CollectionViewSource) 
cvs.Source = Nodes 

轉換器在C#中

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) return null; 

     ICollectionView view = (ICollectionView) value ; 
     view.SortDescriptions.Add(new SortDescription(parameter.ToString(), ListSortDirection.Ascending)); 
     return view; 
    } 

我查了一下,你的代碼很好。

+0

感謝您關注@AnjumSKhan。是的,Nodes只是Node的ObserveableCollection,它是一個具有屬性ID,ParentID和Name的類。我知道收集正在填補。可悲的是,你的建議並沒有改變。 TreeView仍然是空的。 – SezMe

+0

順便說一下,我認爲問題出在轉換器上,但這只是一種預感,因爲我不知道它有什麼問題,也不知道如何改變它。 – SezMe

+0

仍然給出一個空白的TreeView。我也嘗試了轉換器的其他變體。例如,我試圖在你創建的視圖上添加一個DirectCast到ObservableCollection中,但這也沒有幫助。 – SezMe