WPF (MVVM アプローチ) で単純な 2 レベルのツリービューを作成しようとしています。最初のレベルでは標準のデータ テンプレートを使用し、2 番目のレベルではテンプレート セレクターを使用して、各アイテムの外観をそのプロパティの 1 つに基づいて変更できるようにします。
以下は私のTreeview xamlです
<Treeview ItemsSource={Binding ListA}>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ListB}" ItemTemplateSelector={StaticResource TemplateSelector}>
<Textblock Text={Binding Name}/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
私の最初のレベルは
<Textblock Text={Binding Name}/>
名前だけが表示されます
私の第2レベルでは、TemplateSelectorは次のようなデータテンプレートを返しています
<DataTemplate x:Key="SomeKey">
<StackPanel Orientation="Horizontal">
<ViewBox>
-----
</ViewBox>
<TextBlock Text={Binding Name}/>
</StackPanel>
</DataTemplate>
しかし、2 番目のレベルで表示されるのは、2 番目のレベルの ViewModel 名だけです。テンプレートセレクターを再確認したところ、正しいデータテンプレートが確実に返されていますが、表示されていません。
誰でも私を正しい方向に向けることができますか?
編集 -- リクエストに応じてさらにコードを追加
これは私のテンプレートセレクターです
public class DataFieldsDataTemplateSelector : DataTemplateSelector
{
public DataTemplate AlphaTemplate { get; set; }
public ------
public ------
public DataFieldsDataTemplateSelector()
{
//This is getting the template from my ResourceDictionary
AlphaTemplate = (DataTemplate)dDictionary["alphaTemplate"];
}
public override DataTemplate SelectTemplate(object item,DependencyObject container)
{
//Somecode
return AlphaTemplate;
}
}
私の辞書の AlphaTemplate のテンプレートは
<DataTemplate x:Key="alphaTemplate">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="15"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Viewbox IsHitTestVisible="False">
<Path Data="M0,0L56.622002,0 56.622002,14.471 35.715,14.471 35.715,64 20.715,64 20.715,14.471 0,14.471z" Stretch="Uniform" Fill="{DynamicResource ButtonForegroundNormal}" VerticalAlignment="Center" Width="15" Height="15" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<TransformGroup>
<TransformGroup.Children>
<RotateTransform Angle="0" />
<ScaleTransform ScaleX="1" ScaleY="1" />
</TransformGroup.Children>
</TransformGroup>
</Path.RenderTransform>
</Path>
</Viewbox>
<textBlock Text="{Binding Name}/>
</Grid>
</DataTemplate>
私のクラス TypeB には Name(Text) と DataType(Text) フィールドが含まれています。DataType が Alpha の場合は、templateSelector で AlphaTemplate を返します。
ウィンドウに、アイテムを第 2 レベルに追加するアクション (dragDrop) があります。そして、テンプレート セレクターがその DataType に基づいてドロップされたアイテムの正しいデータ テンプレートを選択する必要があります。
私のメイン ViewModel には TypeA オブジェクトの ICollectionView が含まれており、各 TypeA ViewModel には TypeB ViewModel の ICollectionView が含まれています。
何か必要な場合はお知らせください