【转】WPF DataGridComboBoxColumn使用
若要填充下拉列表,请首先使用下列选项之一设置 ComboBox 的 ItemsSource 属性。
静态资源。
x:Static 代码实体。
ComboBoxItem 类型的内联集合。
实现效果如下:
如需使用非静态资源,则需要使用DataGridComboBoxColumn的EditingElementStyle样式修改编辑样式,通过ElementStyle修改正常显示(非编辑状态)样式。
主要XAML代码如下:
- <DataGrid x:Name="grd" ItemsSource="{Binding StuList3}" AutoGenerateColumns="False">
- <DataGrid.Columns>
- <DataGridTextColumn Binding="{Binding No}" Header="学号"/>
- <DataGridTextColumn Binding="{Binding Name}" Header="姓名"/>
- <!--使用普通List集合-->
- <DataGridComboBoxColumn x:Name="cmb" Header="性别">
- <DataGridComboBoxColumn.EditingElementStyle>
- <Style TargetType="ComboBox">
- <Setter Property="ItemsSource" Value="{Binding Path=DataContext.SexList,ElementName=grd}" />
- <Setter Property="DisplayMemberPath" Value="Name" />
- <Setter Property="SelectedValuePath" Value="Name" />
- <Setter Property="SelectedValue" Value="{Binding Sex,UpdateSourceTrigger=PropertyChanged}" />
- </Style>
- </DataGridComboBoxColumn.EditingElementStyle>
- <DataGridComboBoxColumn.ElementStyle>
- <Style TargetType="ComboBox">
- <Setter Property="ItemsSource" Value="{Binding Path=DataContext.SexList,ElementName=grd}" />
- <Setter Property="DisplayMemberPath" Value="Name" />
- <Setter Property="SelectedValuePath" Value="Name" />
- <Setter Property="SelectedValue" Value="{Binding Sex}" />
- </Style>
- </DataGridComboBoxColumn.ElementStyle>
- </DataGridComboBoxColumn>
- <!--使用静态资源-->
- <DataGridComboBoxColumn Header="性别(静态资源)" ItemsSource="{Binding Source={StaticResource myEnum}}"
- TextBinding="{Binding Sex}"
- SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
- </DataGridComboBoxColumn>
- <!--使用x:Static扩展标记-->
- <DataGridComboBoxColumn Header="性别(x:Static)" ItemsSource="{x:Static local:ViewModel.SexList2}"
- TextBinding="{Binding Sex}"
- SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
- </DataGridComboBoxColumn>
- <!--使用内联集合-->
- <DataGridComboBoxColumn Header="性别(内联集合)"
- TextBinding="{Binding Sex}"
- SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
- <DataGridComboBoxColumn.ItemsSource>
- <col:ArrayList>
- <sys:String>男</sys:String>
- <sys:String>女</sys:String>
- </col:ArrayList>
- </DataGridComboBoxColumn.ItemsSource>
- </DataGridComboBoxColumn>
- </DataGrid.Columns>
- </DataGrid>
原文地址:https://blog.csdn.net/rabbitsoft_1987/article/details/22896073
根据上述文章,我试了一下简化,可以实现效果
前端:(DisplayMemberPath="Name" 这里是显示 Element的 名字)
- <DataGrid Name="grdBeam" ItemsSource="{Binding BeamCollection}" Grid.ColumnSpan="3" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightGray">
- <DataGrid.Columns>
- <DataGridComboBoxColumn Header="材质" SelectedItemBinding="{Binding BeamMaterial}" DisplayMemberPath="Name" Width="1*">
- <DataGridComboBoxColumn.EditingElementStyle>
- <Style TargetType="ComboBox">
- <Setter Property="ItemsSource" Value="{Binding Path=DataContext.MaterialItems,ElementName=grdBeam}" />
- </Style>
- </DataGridComboBoxColumn.EditingElementStyle>
- <DataGridComboBoxColumn.ElementStyle>
- <Style TargetType="ComboBox">
- <Setter Property="ItemsSource" Value="{Binding Path=DataContext.MaterialItems,ElementName=grdBeam}" />
- </Style>
- </DataGridComboBoxColumn.ElementStyle>
- </DataGridComboBoxColumn>
- </DataGrid.Columns>
- </DataGrid>
后端:
- public partial class BeamView : Window
- {
- public BeamView()
- {
- InitializeComponent();
- this.DataContext = this;
- }
- public ObservableCollection<BeamGroup> BeamCollection { get; set; } = new ObservableCollection<BeamGroup>();
- /// <summary>
- /// 材料列表
- /// </summary>
- public List<Element> MaterialItems { get; set; } = new List<Element>();
- }
- public class BeamGroup
- {
- public Element BeamMaterial
- {
- get { return _beamMaterial; }
- set
- {
- _beamMaterial = value;
- }
- }
- //.....此处省略N多个属性
- private Element _beamMaterial;
- }
public class Element
{
public string Name { get; set; }
}
【转】WPF DataGridComboBoxColumn使用的更多相关文章
- WPF DataGrid – Dynamically updating DataGridComboBoxColumn
The Scenario I want to do a master detail like scenario where the selection in one ComboBox cell wil ...
- WPF使用DataGridComboBoxColumn完成绑定
在使用DataGrid的时候,有时候需要使某些列为ComboBox,这时自然想到使用DataGridComboBoxColumn,但是如果使用的是ItemsSource数据绑定后台的对象,就会发现,这 ...
- WPF之DataGrid篇:DataGridComboBoxColumn
准备数据源 1 准备数据源.基类为Student,数据对象为Student3,数据集为StuList3. END 编辑DataGrid显示列 1 若要填充下拉列表,请首先使用下列选项之一设置 ...
- wpf之DataGrid绑定DataTable,其中DataGridComboBoxColumn双向绑定枚举enum
百度了快一天,没结果,除了几个原创的,都是复制粘贴的内容. 不想用别的笨办法,于是脑洞大开,想出了我的办法. 首先是前台代码,与网上的比较类似: xmlns:jz="clr-namespac ...
- WPF入门教程系列二十二——DataGrid示例(二)
DataGrid示例的后台代码 1) 通过Entity Framework 6.1 从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,从S_ Province表中读取 ...
- WPF入门教程系列二十一——DataGrid示例(一)
前面我们学习了ListView控件的使用示例,今天我们来学习DataGrid的有关知识.提到DataGrid 不管是Asp.Net中的网页开发还是WinForm应用程序开发都会频繁使用.通过它我们可以 ...
- 关于使用MVVM模式在WPF的DataGrid控件中实现ComboBox编辑列
最近在做一个组态软件的项目,有一个需求需要在建立IO设备变量的时候选择变量的类型等. 建立IO变量的界面是一个DataGrid实现的,可以一行一行的新建变量,如下如所示: 这里需要使用带有ComboB ...
- WPF之 DataGrid数据绑定
DataGrid控件是显示数据的控件,从一个对象集合获取信息并在具有行和单元格的网格中显示信息.每行和一个单独的对象相对应,并且每列和该对象中的一个属性相对应. DataGrid控件添加了许多在WPF ...
- WPF常用控件应用demo
WPF常用控件应用demo 一.Demo 1.Demo截图如下: 2.demo实现过程 总体布局:因放大缩小窗体,控件很根据空间是否足够改变布局,故用WrapPanel布局. <ScrollVi ...
随机推荐
- 不用虚拟机直接在线用的 Linux,统统都在这里!
玩过 Linux 的同学,几乎都用过虚拟机!然而,你们肯定不晓得?不用装虚拟机,也有体验 Linux 的办法.下面一起来看看吧,到底如何不用虚拟机,照样能玩 Linux. 其实方法很简单,你只需要拥有 ...
- python测试开发django-66.图片403forbidden
前言 用 django 开发 web 页面,在 HTML 页面上添加图片时,发现本地图片可以正常显示,但是添加一个互联网的图片,却不能正常显示. 本地 static 图片 先在本地 static 放一 ...
- P5021 赛道修建[贪心+二分]
题目描述 C 城将要举办一系列的赛车比赛.在比赛前,需要在城内修建 mm 条赛道. C 城一共有 nn 个路口,这些路口编号为 1,2,-,n1,2,-,n,有 n-1n−1 条适合于修建赛道的双向通 ...
- 《团队名称》第八次团队作业:Alpha冲刺day4
项目 内容 这个作业属于哪个课程 2016计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8-软件测试与ALPHA冲刺 团队名称 快活帮 作业学习目标 (1)掌握 ...
- 如何将 egg-validate 插件的错误提示,修改为中文?
方案一(需要找到所有的提示并对应成中文,不是一个好方案:例子地址:https://github.com/cag2050/egg_mysql_demo/blob/master/app/controlle ...
- list转json数组
lights为arraylist java后台代码: try { org.tempuri.TLight[] lights = phlightSoapProxy.getLights(); ...
- Java-Modifier类常用方法详解
一.Modifier类的定义 Modifier类 (修饰符工具类) 位于 java.lang.reflect 包中,用于判断和获取某个类.变量或方法的修饰符Modifier类将各个修饰符表示为相对应的 ...
- CF388C&&2018EC Final D题——博弈&&水题
一下两个题目都是按堆取石子,轮流取,每个人都贪心的取即可,感觉都不像博弈. CF388C 有n排石子,每排有若干堆.Ciel可以选择一排,拿走这一排的第一堆石子.Jiro可以选择一排,拿走这一排的最后 ...
- 11.04Test
11.04Test 查看请点个赞 转载请注明出处(~不然~) 题目 描述 做法 \(BSOJ5143\) 要求给\(M\)个通道染色,使得同色通道不能相交 转为矛盾模型,\(2-sat\)or二分图染 ...
- ava js 测试框架基本试用
随着js 越来越强大,日常使用中关于js 的问题也就越突出了,我们需要关注的点也就不能只像以前那样 只编写简单的功能实现,我们同时也需要关注js 的健壮性,测试就是其中一个比较重要的环节,以下 是av ...