Wpf 如何在XAML中创建递归ListView
我的模型看起来像Wpf 如何在XAML中创建递归ListView,wpf,xaml,listview,recursion,Wpf,Xaml,Listview,Recursion,我的模型看起来像 public class MyVm { public string MyTitle { get; set; } public List<MyVm> Children { get; set; } public MyVm() { this.Children = new List<MyVm>(); } } 最后,主窗口视图是 <Grid.Resources> &
public class MyVm
{
public string MyTitle { get; set; }
public List<MyVm> Children { get; set; }
public MyVm()
{
this.Children = new List<MyVm>();
}
}
最后,主窗口视图是
<Grid.Resources>
<Style x:Key="MyStyle" TargetType="ListViewItem">
<Setter Property="ContentTemplate">
<Setter.Value>
<HierarchicalDataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding MyTitle}" />
<ListView ItemsSource="{Binding Children}" ItemContainerStyle="{Binding MyStyle}" />
</StackPanel>
</HierarchicalDataTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<ListView ItemsSource="{Binding Kids}" ItemContainerStyle="{StaticResource MyStyle}" />
正如您所看到的,我已经尝试对每个“子对象”重复使用相同的资源来实现递归位,但遗憾的是,我看到呈现的唯一内容是一个带有标题2的
文本块,出于这些目的,您将使用一个(它有自己的项资源属性,您将绑定到子对象),我不确定列表框是否支持它。如果不使用TreeView
,并更改控制模板以删除缩进和折叠切换按钮(如果您不想这样做)。为此,您将使用(它有自己的项资源
属性,您将绑定到子项
),我不确定列表框
是否支持它。如果不需要,请使用树状视图
,并更改控制模板以删除缩进和折叠切换按钮(如果不需要)。修复了它
<Grid.Resources>
<DataTemplate DataType="{x:Type a:MyVm}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding MyTitle}" />
<ListView ItemsSource="{Binding Children}">
<ListView.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding }" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</DataTemplate>
</Grid.Resources>
<ListView ItemsSource="{Binding Kids}" />
修复了它
<Grid.Resources>
<DataTemplate DataType="{x:Type a:MyVm}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding MyTitle}" />
<ListView ItemsSource="{Binding Children}">
<ListView.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding }" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</DataTemplate>
</Grid.Resources>
<ListView ItemsSource="{Binding Kids}" />
只有当其中一个子元素在祖先行中包含元素时,它才是递归的。否则它只是分层的。@H.B….是的,我想我理解这一点,但我不相信我的数据是递归的(正如您所指出的),但我试图在XAML中递归…只有当其中一个子元素在祖先行中包含元素时,它才是递归的。否则它只是分层的。@H.B….是的,我想我理解这一点,但我不相信我的数据是递归的(正如您所指出的),但我正在尝试在XAML中递归…发生完全相同的事情。。。它只显示了一个项目。。。(我更新为TreeView)HierarchycalDataTemplate
内容应该只是单个项目的表示,不要在其中嵌套额外的ListBox
或类似内容。父控件必须处理这个问题,这就是关键所在,否则您将被困在下一个级别,因为您无法在其内部引用模板。是的,我没想到列表框会处理这个问题。我无法将其格式化,但这就是你的意思吗(如果你能读的话:()?
因为这仍然不起作用…您没有绑定HierarchycalDataTemplate.ItemsSource
。我显然把这件事搞砸了…
但我想我已经了解了这个概念…HierrarchicalDataTemplate将研究绑定元素的所有子元素,如果我们使用DataTemplate,我们可以表示绑定到的属性,发生完全相同的事情…它只显示了1项…(我更新到TreeView)HierarchycalDataTemplate
内容应该只是单个项目的表示,不要在其中嵌套额外的ListBox
之类的内容。父控件必须处理好这一点,这就是关键所在,否则您将被困在下一级,因为您无法在其内部引用模板。是的,我没想到列表框
会处理这个问题。我无法将其格式化,但这就是您的意思吗(如果您可以阅读:()?
因为这仍然不起作用…您没有绑定HierarchycalDataTemplate.ItemsSource
。我显然把这件事搞砸了…
但是我想我已经理解了这个概念…HierrarchicalDataTemplate将研究绑定元素的所有子元素,如果我们使用DataTemplate,我们可以表达我们绑定的属性。Nice,不知道隐式模板可以绕过循环引用问题。Nice,不知道隐式模板可以围绕循环引用问题。