首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >树视图HierarchicalDataTemplate ItemTemplateSelector

树视图HierarchicalDataTemplate ItemTemplateSelector
EN

Stack Overflow用户
提问于 2013-09-04 13:08:35
回答 1查看 8.1K关注 0票数 3

我试图在WPF (MVVM方法)中创建一个简单的2级Treeview。对于我的第一个级别,我有一个标准的数据板,对于我的第二个级别,我想使用一个模板选择器,这样我就可以根据它的一个属性来更改每个项的外观。

下面是我的Treeview xaml

代码语言:javascript
复制
<Treeview ItemsSource={Binding ListA}>
      <TreeView.ItemTemplate>
       <HierarchicalDataTemplate ItemsSource="{Binding ListB}" ItemTemplateSelector={StaticResource TemplateSelector}>
         <Textblock Text={Binding Name}/>
      </HierarchicalDataTemplate>
   </TreeView.ItemTemplate>
</TreeView>

我的第一个层次是

代码语言:javascript
复制
<Textblock Text={Binding Name}/> 

只会显示一个名字

对于我的第二个级别,TemplateSelector返回一个数据板,如下所示

代码语言:javascript
复制
<DataTemplate x:Key="SomeKey">
<StackPanel Orientation="Horizontal">
<ViewBox>
-----
</ViewBox>
<TextBlock Text={Binding Name}/>
</StackPanel>
</DataTemplate>

但是我看到的第二个层次是我的第二级ViewModel名称。我双重检查了模板选择器,它肯定是返回正确的数据模板,但它只是没有显示。

谁能给我指出正确的方向吗?

编辑--根据请求添加了更多代码

这是我的模板选择器

代码语言:javascript
复制
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模板是

代码语言:javascript
复制
<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包含名称(文本)和DataType (文本)字段,如果DataType是阿尔法,则在templateSelector中返回AlphaTemplate等等。

我在窗口上有一个操作(DragDrop),它将项添加到第二级。我希望模板选择器应该根据它的DataType来获取删除项的正确数据板。

我的主ViewModel包含ICollectionView of TypeA对象,每个TypeA ViewModel包含TypeB ViewModels的ICollectionView。

如果你需要什么,请告诉我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-04 13:27:00

我不知道这有什么问题,因为这将需要调试代码,但是您想要实现的目标可以通过为您的DataTemplate定义默认的TypeB并根据如下绑定切换内容来实现:

代码语言:javascript
复制
<DataTemplate DataType="{x:Type TypeB}">
    <ContentControl>
        <ContentControl.Style>
            <Style TargetType="{x:Type ContentControl}">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <!-- Default template here for your item -->
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding XYZ}" Value="true">
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <!-- Different template for your item -->
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ContentControl.Style>
    </ContentControl>        
</DataTemplate>

谢谢

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18614763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档