【问题标题】:ComboBox doesn't show binding data in a DataGridTemplateColumnComboBox 不在 DataGridTemplateColumn 中显示绑定数据
【发布时间】:2018-06-01 12:18:18
【问题描述】:

我创建了一个自定义 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>

如果我遗漏了什么,请纠正我。非常感谢。

【问题讨论】:

    标签: c# wpf xaml combobox datagrid


    【解决方案1】:

    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(); 
    }
    

    【讨论】:

    • 感谢分享 XAML 代码。我在此处粘贴代码时实际上错过了那行。另外我不能使用 datagrid_additionalinfo.Items.Add(new ComboboxViewModel());代码。因为我的数据网格包含供用户输入数据的文本框。它有点复杂。有什么办法可以绑定xaml中的数据吗?
    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2011-10-28
    • 2016-01-21
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多