首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF将列表框绑定到有子枚举项的对象

WPF将列表框绑定到有子枚举项的对象
EN

Stack Overflow用户
提问于 2013-04-03 00:36:59
回答 3查看 221关注 0票数 1

我有一个这样的类:

代码语言:javascript
复制
public class UIThing {
   public string Name{get;set}
   public IEnumerable<Thing> LotsOfThings;
}

我在List (List<UIThings>)中有其中的一些,我想将它们绑定到一个ListBox中,这样LotsOfThings成员就可以作为ListBox中的项展开。我猜就像是列表的列表。但我无法理解所需的DataTemplate

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-03 01:35:49

这可能会让你有这样做的想法:

我建议您使用ItemsControl

代码语言:javascript
复制
public class UIThing
{
    public string Name { get; set; }
    public List<string> LotsOfThings { get; set; }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    UIThing item1 = new UIThing() { Name = "A", LotsOfThings = new List<string>() { "1A", "2A", "3A", "4A" } };
    UIThing item2 = new UIThing() { Name = "B", LotsOfThings = new List<string>() { "1B", "2B", "3B", "4B" } };
    UIThing item3 = new UIThing() { Name = "C", LotsOfThings = new List<string>() { "1C", "2C", "3C", "4C" } };
    UIThing item4 = new UIThing() { Name = "D", LotsOfThings = new List<string>() { "1D", "2D", "3D", "4D" } };

    var list = new List<UIThing>() { item1, item2, item3, item4 };
    itemsControl.ItemsSource = list;
}

这是XAML:

代码语言:javascript
复制
<ItemsControl Name="itemsControl" HorizontalAlignment="Left" Width="100">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Expander Header="{Binding Name}" Margin="0,5" Width="auto">
                <ListBox Width="auto" ItemsSource="{Binding LotsOfThings}" Margin="20,0,0,0" Background="AliceBlue"></ListBox>
            </Expander>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

结果:

编辑:这里的是ListBox版本

代码语言:javascript
复制
<ListBox Name="itemsControl" Margin="0,0,197,0">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Label Content="{Binding Name}" Margin="0,5"></Label>
                <Border Margin="20,0,0,0" Background="AliceBlue" CornerRadius="10">
                    <ListBox Width="auto" ItemsSource="{Binding LotsOfThings}" ></ListBox>
                </Border>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
票数 0
EN

Stack Overflow用户

发布于 2013-04-03 00:51:49

可以使用GridView Can ComboBox

代码语言:javascript
复制
<GridViewColumn Width="100">
    <GridViewColumnHeader Content="Main"/>
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Path=GroupsMain, Mode=OneWay}" DisplayMemberPath="Name"  IsEditable="False" SelectedIndex="0" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

如果您需要单个列中的所有内容,那么可以使用byt Matt建议的TreeView

票数 0
EN

Stack Overflow用户

发布于 2013-04-03 00:53:01

您的UIThing需要一个DataTemplate。在该模板中,您将有另一个绑定到LotsOfThings列表的ListView。然后,您还可以为您的Thing类添加DataTemplate。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15769491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档