那麼讓我說我討厭我提出的解決方案,但它確實有效。也許WPF大師會用更好的選擇來啓發我們。當然,如果您在視圖背後使用ViewModel,則可以在ViewModel中用CollectionView簡單地包裝模型的Items屬性,並完成它。
但這是另一種解決方案。基本上,您的HierarchicalDataTemplate可以保持原樣,除了將Converter添加到Binding。我實現了以下轉換器並相應地更改了XAML。
<HierarchicalDataTemplate DataType="{x:Type books:Container}"
ItemsSource="{Binding Items, Converter={x:Static local:CollectionViewConverter.Instance}}">
<nav:ContainerControl />
</HierarchicalDataTemplate>
CollectionViewConverter.cs
public class CollectionViewConverter : IValueConverter
{
public CollectionViewConverter() {}
static CollectionViewConverter(){
Instance = new CollectionViewConverter();
}
public static CollectionViewConverter Instance {
get;
set;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var view = new ListCollectionView((System.Collections.IList)value);
view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
return view;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// not really necessary could just throw notsupportedexception
var view = (CollectionView)value;
return view.SourceCollection;
}
}
偉大的問題;我自己也想問這個問題。謝謝! :-) – 2011-08-28 01:07:40