wpf中如何实现Combobox作为ListView某列显示
在WPF中,如何实现Combobox作为ListView某列显示。要求进行数据库绑定,如与DataTable中列定义绑定,在没有采用ComboBox时是这样实现的:(XM...
在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>
遗憾的是,实际运行时只显示了组合框而并不显示选中类型。请问怎样表示才行?谢谢! 展开
(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>
遗憾的是,实际运行时只显示了组合框而并不显示选中类型。请问怎样表示才行?谢谢! 展开
1个回答
展开全部
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.
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.
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询