WPF 中的多列列表框

Posted

技术标签:

【中文标题】WPF 中的多列列表框【英文标题】:Multicolumn ListBox in WPF 【发布时间】:2012-02-13 05:24:00 【问题描述】:

我有 3 个TextBoxes 和 1 个Button,并希望将每个TextBoxes 数据输入到单独的列中的ListBox

我知道如何将数据输入一列:

listbox1.Items.Add(TextBox1.text);

但是如何将数据输入到多个列中?

我正在使用 .NET WPF。我想使用ListBoxListView

my window

【问题讨论】:

为什么不是DataGridListView 不会通知 DataSource 选择更改。 【参考方案1】:

你想要一个 ListView 代替:

类似这样的:

<ListView ItemsSource="Binding SourceCollection">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Test1" DisplayMemberBinding="Binding Test1" />
            <GridViewColumn Header="Test2" DisplayMemberBinding="Binding Test2" />
            <GridViewColumn Header="Test3" DisplayMemberBinding="Binding Test3" />
            <GridViewColumn Header="Button">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Button>Button Text</Button>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

【讨论】:

感谢快速回答的朋友,我应该在 xaml 代码中使用它 @MostafaMaklad:就SourceCollection.Add(MyNewItem); 看来,ListBox 没有更新数据绑定。我错过了什么吗?还是我必须实现一些通知定义?【参考方案2】:

As Ray correctly points out,ListView 将完成这项工作。但是,如果您坚持使用和/或想要使用 ListBox,您也可以使用带有 Grid 的 ItemTemplate 并在 ListBox 本身上设置Grid.IsSharedSizeScope property。例如:

<ListBox ItemsSource="Binding DataSource" Grid.IsSharedSizeScope="True">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Column1"/>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Column2"/>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Column3"/>
                </Grid.ColumnDefinitions>
                <!-- Assumes MVVM and you wish to bind to properties and commands -->
                <TextBlock Grid.Column="0" Text="Binding ColumnOneText"/>
                <TextBlock Grid.Column="1" Text="Binding ColumnTwoText"/>
                <TextBlock Grid.Column="2" Text="Binding ColumnThreeText"/>
                <Button Content="ClickMe" Command="Binding ButtonExecutionCommand"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这是一个巧妙的技巧,也可以应用于您有多个 Grid 实例(即:根据本例每个 ListBoxItem 一个)并希望共享列的其他情况。

【讨论】:

代码必须包含在 中,因为现在支持 ItemTemplate 属性的子级 很棒的解决方案。谢谢 谢谢,兄弟。你把我从沉思ListView API 的苦差事中解救了出来:)。【参考方案3】:

使用GroupboxDockpanel

<GroupBox Width="250"
                          Margin="10,0,0,0"                          
                          FontSize="20"
                          Header="کسورات"
                          Style="StaticResource Gb">
                    <ListBox Margin="0" AlternationCount="2">
                        <ListBoxItem>
                            <Border Margin="0"
                                    BorderBrush="#ddd"
                                    BorderThickness="0,1,0,1">
                                <DockPanel Background="#f9f9f9" LastChildFill="True">


                                    <controls2:TimeEditBox DockPanel.Dock="Right"
                                                           FontSize="13"
                                                           Mask="00:00"
                                                           Text="00:00"
                                                           TextAlignment="Center"
                                                           controls2:TextBoxMaskBehavior.Mask="Integer" />
                                    <TextBox Width="50"
                                             Margin="0,0,5,0"
                                             DockPanel.Dock="Right"
                                             FontSize="13"
                                             Text="122"
                                             TextAlignment="Center"
                                             controls2:TextBoxMaskBehavior.Mask="Integer" />
                                    <TextBlock VerticalAlignment="Center"
                                               FontSize="13"
                                               Text="غیبت"
                                               TextAlignment="Center" />
                                </DockPanel>
                            </Border>
                        </ListBoxItem>
                      **</ListBox>**
                </GroupBox>

【讨论】:

以上是关于WPF 中的多列列表框的主要内容,如果未能解决你的问题,请参考以下文章

使用 WrapPanel 和 ScrollViewer 在 WPF 中提供多列列表框

WPF组合框:多列宽度

如何展平熊猫数据框多列中的字典列表

将数据框列中的列表拆分为多列[重复]

将列表的列拆分为同一 PySpark 数据框中的多列

基于具有列表值的多列删除数据框中的重复行[重复]