Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通用Windows平台上的递归XAML绑定数据模板_Xaml_Templates_Recursion_Win Universal App - Fatal编程技术网

通用Windows平台上的递归XAML绑定数据模板

通用Windows平台上的递归XAML绑定数据模板,xaml,templates,recursion,win-universal-app,Xaml,Templates,Recursion,Win Universal App,所以我有一个类任务,它有两个属性,也可以有一个任务对象列表(子任务)。我希望递归地在“UWP”上显示每个任务及其子任务。根据这篇文章,“WPF”显然有专门的“用户控制”: 但它们似乎在“UWP”上不可用。您可以使用TreeView控件 以下是指向此项目的链接:和 使用软件包管理器控制台将其安装到项目中:Install Package WinRTXamlToolkit.UWP 我已经根据你的要求做了一个基本的演示。见以下代码: MainPage.xaml: <Page x:Class="Tr

所以我有一个类任务,它有两个属性,也可以有一个任务对象列表(子任务)。我希望递归地在“UWP”上显示每个任务及其子任务。根据这篇文章,“WPF”显然有专门的“用户控制”:


但它们似乎在“UWP”上不可用。

您可以使用TreeView控件

以下是指向此项目的链接:和

使用软件包管理器控制台将其安装到项目中:
Install Package WinRTXamlToolkit.UWP

我已经根据你的要求做了一个基本的演示。见以下代码:

MainPage.xaml:

<Page
x:Class="TreeViewSample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TreeViewSample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="using:WinRTXamlToolkit.Controls"
xmlns:data="using:WinRTXamlToolkit.Controls.Data"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <controls:TreeView  ItemsSource="{x:Bind myList}">
        <controls:TreeView.ItemTemplate>
            <DataTemplate>
                <data:DataTemplateExtensions.Hierarchy>
                    <data:HierarchicalDataTemplate ItemsSource="{Binding SubTasks}"></data:HierarchicalDataTemplate>
                </data:DataTemplateExtensions.Hierarchy>
                <TextBlock Text="{Binding Name}"></TextBlock>
            </DataTemplate>
        </controls:TreeView.ItemTemplate>
    </controls:TreeView>
</Grid>

MainPage.xaml.cs:

namespace TreeViewSample
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
        public List<Task> myList;

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            myList = new List<Task>();
            var  taskA = new Task("TaskA");
            taskA.SubTasks = new List<Task> {
            new Task("SubTaskA"),
            new Task("SubTaskB"),
            new Task("SubTaskC")
        };
        taskA.SubTasks[0].SubTasks = new List<Task> {
            new Task("SubSubTaskA"),
            new Task("SubSubTaskB"),
            new Task("SubSubTaskC"),
            new Task("SubSubTaskD")
        };
        myList.Add(taskA);
    }
}

    public class Task
    {
        public Task(string name) {
            this.Name = name;
        }

        private String name;

        public String Name
        {
            get { return name; }
            set { name = value; }
        }

        public List<Task> SubTasks { get; set; }

    }
}
名称空间树视图示例
{
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
}
公开名单;
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
myList=新列表();
var taskA=新任务(“taskA”);
taskA.SubTasks=新列表{
新任务(“子任务”),
新任务(“子任务KB”),
新任务(“子任务”)
};
taskA.SubTasks[0]。SubTasks=新列表{
新任务(“子任务A”),
新任务(“子任务B”),
新任务(“子任务C”),
新任务(“子任务D”)
};
myList.Add(taskA);
}
}
公开课任务
{
公共任务(字符串名称){
this.Name=Name;
}
私有字符串名称;
公共字符串名
{
获取{返回名称;}
设置{name=value;}
}
公共列表子任务{get;set;}
}
}

非常感谢,设计它似乎很麻烦,但这正是我想要的,所以我将标记为答案