WPF ListBox里面有多个ListBoxs

时间:2014-11-20 06:02:58

标签: c# wpf xaml

我想在wpf中使用ListBox内的ListBox,这就是我想要做的事情

public ObservableCollection<Users> List1DS { get; set; }
public ObservableCollection<Users> List2DS { get; set; }
public ObservableCollection<Users> List3DS { get; set; }

public class Users
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string FirstName { get; set; }
}
//This will have List1DS,List2DS and List3DS
public ObservableCollection<List<Users>> MainDS { get; set; }

XAML:

<ListBox Margin="25,74,835,-194" x:Name="userslst" ItemsSource="{Binding MainDS}">                      
    <ListBox ItemsSource="{Binding List1DS}">
    </ListBox>
</ListBox> 

在MainDS中可以有零个或多个项目,我想知道在WPF中这样的事情是可能的吗? 这样做的另一种方法是什么?

2 个答案:

答案 0 :(得分:0)

是的,这可以通过将列表框放在顶部列表框的ItemTemplate中并绑定它来完成。

但是你可能不想这样做并去寻找树视图/分层模板结构,因为这已经是你想要实现的了。

答案 1 :(得分:0)

确实可以显示集合的集合,并且可能比您想象的更容易。您只需为显示第二级项目的第一级项目提供ItemTemplate。尝试这样的事情:

<ListBox ItemsSource="{Binding MainDS}">
    <ListBox.ItemTemplate>
        <DataTemplate> <!-- Define top level items -->
            <ListBox ItemsSource="{Binding}"> <!-- Bind to inner collection -->
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBox.ItemTemplate>
                    <DataTemplate> <!-- Define second level items -->
                        <TextBlock Text="{Binding Name}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>