ここでwpfが何をするのかわかりません(C#で.NET 3.5を使用):
私のアプリケーション リソースでは、さまざまなタイプの ViewModel に対していくつかの DataTemplates と HierarchicalDataTemplates を定義しました。これまでのところ、これはうまく機能しており、ウィンドウの TreeView には期待どおりのノードが表示されます。すべての ViewModel のすべての Childelements は ICollectionView として提供されたと言わざるを得ません。ここで、ICollectionView の特殊機能を使用して、TreeView の「ルートノード」をグループ化、並べ替え、およびフィルター処理することにしました。TreeView を次のようにしました。
<TreeView ItemsSource="{Binding Path=Elements.Groups}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Items}" ItemTemplate="{StaticResource SOMEITEMTEMPLATENAME}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
ビューモデルは次のようになります。
class RootViewModel
: INotifyPropertyChanged
{
public ICollectionView Elements
{
get
{
ICollectionView view = CollectionViewSource.GetDefaultView(_elementsFromModel.Select(x => new FirstChildViewModel(x));
view.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
view.Filter = delegate(Object x) { /*do some filter stuff here*/ };
return view;
}
}
}
class FirstchildViewModel
: INotifyPropertyChanged
{
/*some other stuff here*/
public ICollectionView Items
{
get;
}
}
現在の問題は、TreeView がより深い子要素の適切なテンプレートを自動的に選択しないことです。それで、それの何が問題なのですか?