【问题标题】:wpf using DataTemplate into HierachicalDataTemplatewpf 使用 DataTemplate 到 HierachicalDataTemplate
【发布时间】:2014-04-07 14:18:49
【问题描述】:

在 Wpf 应用程序中,我必须将相同的项目集合显示到 ListBox 和 TreeView 中,List 仅显示第一级,TreeView 显示整个层次结构。我的问题是:为什么在 TreeView 中没有应用我为 Item 对象声明的 DataTemplate?如何在 2 个控件之间共享相同的 DataTemplate(进入电视的文本颜色必须为红色)?

<Window x:Class="TestWpf.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    xmlns:viewmodel="clr-namespace:TestWpf"
    >
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>

    <Grid.Resources>
        <DataTemplate DataType="{x:Type viewmodel:Item}">
            <TextBlock Foreground="Red" Text="{Binding Caption}"></TextBlock>
        </DataTemplate>
    </Grid.Resources>
    <ListBox Grid.Row="0" Name="lb1" ></ListBox>
    <TreeView Name="tv1"  Grid.Row="1" >
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type viewmodel:Item}" ItemsSource="{Binding Items}" >

            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>
</Grid>

MainWindow.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace TestWpf
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();

        ObservableCollection<Item> Items = new ObservableCollection<Item>();

        var item1 = new Item("1");
        Items.Add(item1);

        item1.Items.Add(new Item("1.1"));
        item1.Items.Add(new Item("1.2"));
        item1.Items.Add(new Item("1.3"));

        var item2 = new Item("2");
        Items.Add(item2);

        item2.Items.Add(new Item("2.1"));
        item2.Items.Add(new Item("2.2"));
        item2.Items.Add(new Item("2.3"));

            var item3 = new Item("3");
            Items.Add(item3);

            item3.Items.Add(new Item("3.1"));
            item3.Items.Add(new Item("3.2"));
            item3.Items.Add(new Item("3.3"));

            this.lb1.ItemsSource = Items;
            this.tv1.ItemsSource = Items;
        }
    }
}

Item.cs

namespace TestWpf
{
    public class Item
    {
        public List<Item> Items { get; set; }
        public string Caption { get; set; }
        public Item(string caption)
        {
            this.Caption = caption;
            this.Items = new List<Item>();
        }
    }
}

【问题讨论】:

    标签: c# wpf xaml treeview hierarchicaldatatemplate


    【解决方案1】:

    我只是将您的代码复制并粘贴到 VS 中,然后按 F5 即可。 我唯一需要更改的是命名空间,因为我使用 WPFApplication1 创建了它:)

    尝试将您的代码放到一个新项目中并尝试构建它,看看它是否有效。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多