WPF DataGridComboBoxColumn 如果不在 ItemsSource 中,则不显示文本
本文关键字:显示 文本 DataGridComboBoxColumn 如果不 ItemsSource WPF | 更新日期: 2023-09-27 18:28:29
在我的 C# WPF 应用程序中,我以编程方式将 ComboBoxColumn 添加到 DataGrid:
public static DataGridComboBoxColumn getCboCol(string colName, Binding textBinding)
{
List<string> statusItemsList = new StatusStrList();
DataGridComboBoxColumn cboColumn = new DataGridComboBoxColumn();
cboColumn.Header = colName;
cboColumn.SelectedItemBinding = textBinding;
cboColumn.ItemsSource = statusItemsList;
return cboColumn;
}
如果包含的数据网格中的项目包含我的StatusStrList
不包含的文本,则不会显示该文本。
示例:如果我的StatusStrList
包含A, B, C
并且 DataGrid 的项具有X
,则X
不会在 ComboBox 中显示为文本。
我该如何解决这个问题?
提前感谢,基督教
DataGridComboBoxColumn
不够动态,无法执行此类操作,但您可以使用DataGridTemplateColumn
。下面的代码应该可以实现您需要的功能。它的工作原理是使用包含TextBlock
的CellTemplate
,该可以轻松显示不在ComboBox
ItemsSource
中的项目。进入编辑模式将显示包含列表中所有项的ComboBox
。
DataGridTemplateColumn cboColumn = new DataGridTemplateColumn();
cboColumn.Header = colName;
//DataTemplate for CellTemplate
DataTemplate cellTemplate = new DataTemplate();
FrameworkElementFactory txtBlkFactory = new FrameworkElementFactory(typeof(TextBlock));
txtBlkFactory.SetValue(TextBlock.TextProperty, textBinding);
cellTemplate.VisualTree = txtBlkFactory;
cboColumn.CellTemplate = cellTemplate;
//DataTemplate for CellEditingTemplate
DataTemplate editTemplate = new DataTemplate();
FrameworkElementFactory cboFactory = new FrameworkElementFactory(typeof(ComboBox));
cboFactory.SetValue(ComboBox.TextProperty, textBinding);
cboFactory.SetValue(ComboBox.ItemsSourceProperty, statusItemsList);
cboFactory.SetValue(ComboBox.IsEditableProperty, true);
MouseEventHandler handler = new MouseEventHandler(delegate(object sender, MouseEventArgs args)
{
ComboBox cboBox = (ComboBox)sender;
cboBox.IsDropDownOpen = true;
});
cboFactory.AddHandler(ComboBox.MouseEnterEvent, handler);
editTemplate.VisualTree = cboFactory;
cboColumn.CellEditingTemplate = editTemplate;