ComboBox不会在DataGridTemplateColumn中显示绑定数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ComboBox不会在DataGridTemplateColumn中显示绑定数据相关的知识,希望对你有一定的参考价值。

我创建了一个自定义DataGrid,其中定义了组合框的列。我试图将itemsource值提供给组合框,但它不会在运行时填充组合框中的数据。这是C#和XAML代码。

public MainWindow()
{
    InitializeComponent();
    datagrid_additionalinfo.Items.Add(new object());

    datagrid_additionalinfo.DataContext = new ComboboxViewModel();
}

public class ComboboxViewModel
{
    public List<string> Members { get; set; }
    public List<string> Disciplines { get; set; }

    public ComboboxViewModel()
    {
        this.Members = new List<string>
        {
            "Ali", "Mubashar", "Muffassir", "Nitin"
        };

        this.Disciplines = new List<string>
        {
            "Architecture", "Mechanical", "Structure"
        };
    }
}

<DataGrid  Name="datagrid_additionalinfo" Margin="20,0,20,0" IsReadOnly="False" SelectionMode="Single" CanUserAddRows="True" AutoGenerateColumns="False" SelectionUnit="Cell" >

     <DataGrid.Columns>

            <DataGridTemplateColumn Header="Discipline"   Width="100" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox Width="200" ItemsSource="{Binding Disciplines}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Header="Members"  Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox Width="200" ItemsSource="{Binding Members}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

     </DataGrid.Columns>

 </DataGrid>

如果我错过了什么,请纠正我。非常感谢你。

答案

DataGrid列应放在'Columns'标记内:

    <DataGrid ...>
        <DataGrid.Columns>
          <DataGridTemplateColumn Header="Discipline"   Width="100" >
            ...
          </DataGridTemplateColumn>
          <DataGridTemplateColumn Header="Members"  Width="100">
            ...
          </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

而且,如果您喜欢从代码中填充项目,则不需要使用DataContext,只需编写:

    public MainWindow()
    {
        InitializeComponent();
        datagrid_additionalinfo.Items.Add(new ComboboxViewModel());            
    }

编辑:

如果您更喜欢使用DataContext,请创建一个包含所有项的ViewModel,例如:

public class MainViewModel
{
    public List<ComboboxViewModel> Items { get; set; }

    public MainViewModel()
    {
        Items = new List<ComboboxViewModel>() { new ComboboxViewModel()};
    }
}

然后在xaml中绑定它:

<DataGrid  Name="datagrid_additionalinfo" ItemsSource="{Binding Items}" ...>

并设置DataContext:

public MainWindow()
{
    InitializeComponent();
    datagrid_additionalinfo.DataContext = new MainViewModel(); 
}

以上是关于ComboBox不会在DataGridTemplateColumn中显示绑定数据的主要内容,如果未能解决你的问题,请参考以下文章

Winforms:更改分辨率时,ComboBox高度不会调整大小

当 ItemsSource 更改 MVVM 时,Combobox SelectedItem 不会更新

Kendo React ComboBox 不会滚动到键入的值

ExtJS ComboBox 不会显示项目

当 DataSource 值更改时,WinForms ComboBox 中的项目不会更新

在使用ItemContainerGenerator进行自定义时,WPF ComboBox在第二次打开之前不会更新项目