我正在尝试在 WPF(MVVM 方法)中创建一个简单的 2 级 Treeview。对于我的第一级,我有一个标准的数据模板,对于我的第二级,我想使用一个模板选择器,以便我可以根据每个项目的一个属性来更改它的外观。
下面是我的 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}/>
只会显示一个名字
对于我的第二级,TemplateSelector 正在返回一个数据模板,类似于
<DataTemplate x:Key="SomeKey">
<StackPanel Orientation="Horizontal">
<ViewBox>
-----
</ViewBox>
<TextBlock Text={Binding Name}/>
</StackPanel>
</DataTemplate>
但我在第二级看到的只是我的第二级 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>
如果 DataType 是 Alpha,我的类 TypeB 包含一个 Name(Text) 和 DataType(Text) 字段我在我的 templateSelector 中返回 AlphaTemplate 等等
我在窗口上有一个操作(dragDrop),它将项目添加到第二级。我希望模板选择器应该根据它的 DataType 为该删除的项目选择正确的数据模板
我的主 ViewModel 包含 TypeA 对象的 ICollectionView,每个 TypeA ViewModel 包含 TypeB ViewModels 的 ICollectionView。
如果你需要帮助,请告诉我