1
所以我有一個類Task,它有幾個屬性,並且裏面還可以有一個列表Task對象(子任務)。我想遞歸地在「UWP」上顯示每個任務及其子任務。顯然'WPF'有特殊的'UserControls'爲此目的根據這個職位:Are recursive DataTemplates possible?通用Windows平臺上的遞歸XAML綁定數據模板
但他們似乎不可用'UWP'。
所以我有一個類Task,它有幾個屬性,並且裏面還可以有一個列表Task對象(子任務)。我想遞歸地在「UWP」上顯示每個任務及其子任務。顯然'WPF'有特殊的'UserControls'爲此目的根據這個職位:Are recursive DataTemplates possible?通用Windows平臺上的遞歸XAML綁定數據模板
但他們似乎不可用'UWP'。
您可以使用TreeView控件。
以下是此項目的鏈接:NuGet:WinRTXamlToolkit和GitHub:WinRTXamlToolkit。 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; }
}
}
感謝了很多,這似乎是一個很麻煩的風格,但這是我要求的,所以我會標記爲答案 – NicolasL