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。我想使用ListBox
或ListView
。
my window
【问题讨论】:
为什么不是DataGrid
? ListView
不会通知 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 一个)并希望共享列的其他情况。
【讨论】:
ListView
API 的苦差事中解救了出来:)。【参考方案3】:
使用Groupbox
和Dockpanel
<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 中的多列列表框的主要内容,如果未能解决你的问题,请参考以下文章