在写次文前先不得不说下网上的其他wpf的DataGrid绑定ComboBox的方式,看了之后真是让人欲仙欲死。
首先告诉你一大堆的模型,一大堆的控件模板,其实或许你紧紧只想知道怎么让combobox怎么显示出来而已。
惯例先上图:
达到这样的效果其实很简单,除了让数据模型之外紧紧只有几行代码。
先看数据模型:
view source
print
if
(string.IsNullOrEmpty(propertyName))
throw
new
ArgumentNullException(
"propertyName"
);
PropertyChangedEventHandler handler = PropertyChanged;
if
(handler !=
null
) handler(
this
,
new
PropertyChangedEventArgs(propertyName));
后面的OnPropertyChanged无需在意 是为了达到数据动态变化 ,一般是不需要的
看下datagrid 的combobox的模板 这是重点
view source
print
<DataGrid AutoGenerateColumns=
"False"
Height=
"236"
HorizontalAlignment=
"Left"
Margin=
"12,0,0,0"
Name=
"dataGrid1"
VerticalAlignment=
"Top"
Width=
"471"
>
<DataGrid.Columns>
<DataGridTextColumn Header=
"Header1"
Binding=
"{Binding Name}"
/>
<DataGridTemplateColumn Header=
"Template"
>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource=
"{Binding Desciption}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
看到了 吗 总共两列 一个textbox 一个combobox 就是这么简单 除过数据模型之外紧紧几行代码就可以搞定!
数据的初始化:
view source
print
public ObservableCollection<Department> listDepartments{set;get;}
listDepartments = DB.GetCollection<Department>();
this.DataContext = this;
<Window.Resources>
<CollectionViewSource x:Key="departments" Source="{Binding listDepartments}" />
</Window.Resources>
<DataGridComboBoxColumn Width="100" Header="专业组" SelectedValuePath="Name" TextBinding="{Binding Department}" ItemsSource="{Binding Source={StaticResource departments}}" DisplayMemberPath="Name" />
在写次文前先不得不说下网上的其他wpf的DataGrid绑定ComboBox的方式,看了之后真是让人欲仙欲死。首先告诉你一大堆的模型,一大堆的控件模板,其实或许你紧紧只想知道怎么让combobox怎么显示出来而已。惯例先上图:达到这样的效果其实很简单,除了让数据模型之外紧紧只有几行代码。先看数据模型:view sourceprint?01.pu...
不管是
WPF
还是winform
中
,多个
ComboBox
绑定
同一个数据源时,选择其
中
一个
ComboBox
,其他的也跟着变成同一选项.原因是
combobox
绑定
了同一个数据源,对数据源的操作导致了其他控件改变.但是在有些情况下, 我们确实需要让多个
combobox
控件
绑定
同一个数据源,但不想让他们联动.这样就必须想办法让他们分别对应一个数据源.
为每一个combox都设置不同的数据源就行了
WPF
中
最近项目有个需求需要动态扩展
DataGrid
,动态扩展列,cell的模板不一样,有的textbox,有的combox,并且需要后台
绑定
style设置datatrigger
先看combox的
DataGrid
TemplateColumn col = new
DataGrid
TemplateColumn();
var stackPanelFactory = new FrameworkElementFactory(typeof(S
关于
WPF
中
DataGrid
中
ComboBox
的内容显示异常的问题,可能会有多种原因。以下是一些可能的解决方法:
1. 如果
ComboBox
的ItemsSource是
绑定
的,那么可能是
绑定
的数据源发生了变化,但是
ComboBox
没有及时刷新。可以尝试调用
ComboBox
的UpdateLayout()或者InvalidateVisual()方法来强制刷新界面。
2. 另外,如果
ComboBox
的数据源
中
包含了空值或者重复的值,可能会导致显示异常。可以尝试对数据源进行过滤,只保留有效的选项。
3. 如果
ComboBox
中
的内容是从数据库
中
读取的,可能是因为数据类型不匹配导致的。可以检查数据库
中
的数据类型和
ComboBox
中
的数据类型是否一致。
4. 另外,如果
ComboBox
中
的选项是从多个表格
中
读取的,可能需要使用Join语句来将数据合并到一个表格
中
,再
绑定
到
ComboBox
上。
希望以上方法能够帮助解决你的问题。