wpf中如何实现combobox作为listview某列显示

author author     2023-05-08     800

关键词:

在WPF中,如何实现Combobox 作为 ListView 某列显示。要求进行数据库绑定,如与DataTable 中列定义绑定,在没有采用 ComboBox时是这样实现的:
(XMAL)
<ListView Name="listView1" >
<ListView.View>
<GridView>
<GridViewColumn Header="列名" DisplayMemberBinding="Binding ColumnName" />
<GridViewColumn Header="数据类型" DisplayMemberBinding="Binding DataType.Name" />
<GridViewColumn Header="数据长度" DisplayMemberBinding="Binding MaxLength" />
<GridViewColumn Header="允许 null" DisplayMemberBinding="Binding AllowDBNull" >
</GridView>
</ListView.View>
</ListView>

(CODE)
DataTable table=…….; //取得数据表
listView1.ItemsSource = table.Columns;

运行通过,现在要求“数据类型”采用 ComboBox 显示,“数据类型”类型可能有 String,Boolean,Byte[]等多项(例仅为说明问题采用以上3项即可)。修改后的XMAL如下:
<ListView Name="listView1" >
<ListView.View>
<GridView>
<GridViewColumn Header="列名" DisplayMemberBinding="Binding ColumnName" />
<GridViewColumn Header="数据类型" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedValue="Binding Path=DataType.Name,Mode=OneWay" >
<ComboBoxItem Content="String" />
<ComboBoxItem Content="Boolean" />
<ComboBoxItem Content="Byte[]" />
</ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn> <GridViewColumn Header="数据长度" DisplayMemberBinding="Binding MaxLength" />
<GridViewColumn Header="允许 null" DisplayMemberBinding="Binding AllowDBNull" >
</GridView>
</ListView.View>
</ListView>
遗憾的是,实际运行时只显示了组合框而并不显示选中类型。请问怎样表示才行?谢谢!

参考技术A DataType.Name 是一个 String.
ComboBoxItem 是一个 Control.

你的例子中, ComboBox 的 SelectedValue 的类型应该对应 ComboBoxItem, 而你企图强制指定它为一个 String, 显然不行.
概念不清 :(

试试这个:
在 根元素加入:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
然后重新写过 ComboBox:
<ComboBox SelectedValue="Binding Path=DataType.Name, Mode=OneWay">
<sys:String>String</sys:String>
<sys:String>Boolean</sys:String>
<sys:String>Byte[]</sys:String>
</ComboBox>

then, you got it.

----
补充说明一下, 我这个与你的 ComboBox 的不同之处:
我的示例中, ComboBox 的每个 Item 是 String. SelectedValue 就是一个 string, 只是这个 String 默认的由 ComboBoxItem 来承载.
你的示例中, ComboBox 的每个 Item 是 ComboBoxItem, 这个 ComboBoxItem 的Content 值是 String. SelectedValue 是一个 ComboBoxItem. (由於它是 ComboBoxItem, 所以 wpf 不会再用一个 ComboBoxItem 来承载它.)

直观一点就是:
<ComboBox x:Name="cb1" SelectedIndex="0">
<ComboBoxItem Content="String"/>
</ComboBox>
<ComboBox x:Name="cb2" SelectedIndex="0">
<sys:String>String</sys:String>
</ComboBox>
MessageBox.Show(cb1.SelectedValue.GetType().ToString());
MessageBox.Show(cb2.SelectedValue.GetType().ToString());
答案应该是:
System.Windows.Controls.ComboBoxItem 和
System.String

Hope help.本回答被提问者和网友采纳

如何在 wpf 中隐藏 ComboBox 中的文本

】如何在wpf中隐藏ComboBox中的文本【英文标题】:HowtohidethetextfromComboBoxinwpf【发布时间】:2021-02-2518:12:28【问题描述】:我想从ComboBox中获得下拉菜单并绑定SelectedItem,但不想在组合框中显示所选项目。因此,无论选择什么项目... 查看详情

如何在 WPF ComboBox 中正确显示过长的文本

】如何在WPFComboBox中正确显示过长的文本【英文标题】:HowtodisplaytoolongtextproperlyinWPFComboBox【发布时间】:2012-05-1922:51:18【问题描述】:我有一个显示各种长度文本的组合框。对于不长的文本没有问题。对于长于ComboBox宽度的文本... 查看详情

在wpf使用中读取一个配置文件获得一个结构体list,然后将数据绑定到combobox下拉列表框中,如何实现?

...vvm的话,soeasy新建一个silverlight4工程在Window1.xaml加入一个comboBox1后台中加个student的类publicclassStudentpublicstringNameget;set;publicintAgeget;set;publicWindow1()InitializeComponent();List<Student>StudList=newList<Student>();StudList.Add(newStudent()Name="... 查看详情

如何从选定的 WPF ComboBox 项 C# 中显示内容

】如何从选定的WPFComboBox项C#中显示内容【英文标题】:HowtodisplaycontentfromselectedWPFComboBoxitemC#【发布时间】:2021-03-1108:10:02【问题描述】:我希望每个人都很好我正在用C#和WPF构建一个小应用程序,我正在尝试添加一个功能,当单... 查看详情

WPF 派生的 ComboBox SelectedValuePath 问题

】WPF派生的ComboBoxSelectedValuePath问题【英文标题】:WPFderivedComboBoxSelectedValuePathissue【发布时间】:2011-01-2505:12:00【问题描述】:在我们的应用程序中,我们有一个非常大的数据集,作为ComboBox列表等的数据字典。这些数据被静态... 查看详情

WPF:将 DataGrid 放入 ComboBox

】WPF:将DataGrid放入ComboBox【英文标题】:WPF:PuttingaDataGridinaComboBox【发布时间】:2013-02-0317:55:25【问题描述】:在WPF中,如何将DataGrid放入ComboBox以显示多列?像下面这样的东西似乎没有做任何事情:<ComboBox><ItemsPanelTemplate&... 查看详情

如何将通用项目添加到绑定到 WPF 中的集合的 ComboBox

】如何将通用项目添加到绑定到WPF中的集合的ComboBox【英文标题】:HowdoyouaddagenericitemtoaComboBoxboundtoacollectioninWPF【发布时间】:2011-01-1005:42:09【问题描述】:我在WPF应用程序中有一个ComboBox,它绑定到C#ViewModel类中Department对象的Ob... 查看详情

wpf的datagrid中,如何让两个combobox联动?

...可以向楼上一样在前端用binding去做,个人建议在后台用combobox的selectionChanged事件去做。这样逻辑更清楚,方便维护和更改。方法就是“名称1”列的所有combobox都加个selectonChanged事件:参考代码:privatevoidComboBox_SelectionChanged(objects... 查看详情

禁止/阻止选择 wpf 中禁用的组合框项目

...用的组合框项目【英文标题】:Disallow/Blockselectionofdisabledcomboboxiteminwpf【发布时间】:2014-01-2007:33:39【问题描述】:我正在编写一个应用程序,其中我想禁用ComboBox中的几个项目,并且还想禁止/阻止选择禁用的项目。请注意,主... 查看详情

在 WPF 中优雅地覆盖 ComboBox 的 ToggleButton 样式

】在WPF中优雅地覆盖ComboBox的ToggleButton样式【英文标题】:ElegantlyoverridestyleofComboBox\'sToggleButtoninWPF【发布时间】:2010-12-2011:24:35【问题描述】:我有一个关于如何优雅地覆盖控件可视化树深处的任意元素的问题。我也尝试过用几... 查看详情

wpf怎么设置combobox.text

用WPF的ComboBox控件的时候,需要用到TextChanged属性,但是这个属性属于TextBox控件,不用担心,ComboBox中存在TextBox,所以关键问题就是如何找到ComboBox中的TextBox控件。ComboBox控件的默认组成:第一层(1个控件):System.Windows.Controls.G... 查看详情

如何在 WPF 的 Datagrid 中设置以编程方式生成的 ComboBox 的启用属性?

】如何在WPF的Datagrid中设置以编程方式生成的ComboBox的启用属性?【英文标题】:HowtosettheenablepropertyofaprogrammaticallygeneratedComboBoxinaDatagridinWPF?【发布时间】:2018-01-3016:36:25【问题描述】:在WPF中,我有一个有2列的Datagrid。第一个... 查看详情

wpf实现可以多选的combobox有啥好的思路或解决方案

参考技术A重写<ComboBox.ItemTemplate>,在模板里面添加一个选择框和文本,根据后台属性绑定,确定是否选中和多选 参考技术B无法想象多选combobox是什么鬼 查看详情

wpf中,combobox值显示问题

WPF中,如果一个下拉框ComboBox是通过绑定XML显示的下拉内容,将其选定的项保存到数据库后,使用SqlDataReader.Read的方法取出该值。问题如何将取出来的值再显示到该ComboBox上去,无法将取出来的值赋值给SelectedValue?ComboBox里的数... 查看详情

如何使 WPF ComboBox 项目背景可见?

】如何使WPFComboBox项目背景可见?【英文标题】:HowtomakeWPFComboBoxitemsbackgroundVisible?【发布时间】:2021-12-1516:45:12【问题描述】:<GridGrid.Row="5"Grid.Column="1"><ComboBoxCursor="Hand"SelectedItem="BindingSelectedRealEstate"Background=" 查看详情

wpf如何根据输入信息动态生成treeview

...侧为待生成的treeview右侧分为上下两部分,上面的部分为combobox,下面的部分为两个不同的用户控件,下面的部分根据上面部分的combobox选择,分别展示两个不同控件问:如何根据右侧两个不同控件的textbox输入信息,动态生成左... 查看详情

wpf中combox的点击事件是啥

SelectionChanged是combobox中的选项改变之后才会发生,怎样不用鼠标按下事件才能实现点击选项立马就能触发事件?如果你是想在选中某一项时触发事件,建议用SelectionChanged事件。wpf的单击事件都是从ButtonBase中继承的,其他控件没... 查看详情

wpf,mvvm,在combobox中嵌套了checkbox控件,数据绑定完成后,无法实现双向绑定

...m层的数据可以在页面正确显示,是单向的。xaml代码:<ComboBoxHeight="23"HorizontalAlignment="Left"Grid.Column="0"Grid.Row="0"Margin="15,4,6,4"x:Name="KeyComboBox"VerticalAlignment="Top"Width="120"Te... 查看详情