0

在我的 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;
}

如果包含 DataGrid 中的项目包含 myStatusStrList不包含的文本,则不会显示。

示例:如果我的StatusStrListcontainsA, B, C和 DataGrid 的项目 has XX则不会在 ComboBox 中显示为文本。

我怎样才能解决这个问题?

在此先感谢,克里斯蒂安

4

1 回答 1

0

DataGridComboBoxColumn不够动态,无法执行此类操作,但您可以使用DataGridTemplateColumn. 下面的代码应该可以实现您需要的功能。它通过使用CellTemplate包含 a来工作,TextBlock它可以轻松显示不在 中的ItemsSource项目ComboBox。进入编辑模式将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;
于 2013-08-21T14:54:11.410 回答