Search code examples
c#wpfdatagridcomboboxcolumn

how to bind combobox with different data in gridview WPF


I have created gridview with combobox in WPF application.As shown,

    <ListView Name="MyListView" Width="261">
        <ListView.View>
            <GridView>

                <GridView.Columns>

                    <GridViewColumn DisplayMemberBinding="{Binding Operation}" />
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding Choices}" Width="100px"  />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                </GridView.Columns>

            </GridView>
        </ListView.View>
    </ListView>

And, I have binded the combobox with different data for each row in gridview in C#,

var dahList = new List<StatsOperation>();
dahList.Add(new StatsOperation
{
    Operation = "Op A",
    Choices = new string[] { "One", "Two", "Three" },
});
dahList.Add(new StatsOperation
{
    Operation = "Op B",
    Choices = new string[] { "4", "5", "6" },
});
this.MyListView.ItemsSource = dahList;

It does not show any content in combobox


Solution

  • <Window x:Class="WPFTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPFTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <ListView Name="MyListView" Width="261">
        <ListView.View>
            <GridView>
    
                <GridView.Columns>
    
                    <GridViewColumn DisplayMemberBinding="{Binding Operation}" />
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding Choices}" Width="100px"  />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
    
                </GridView.Columns>
    
            </GridView>
        </ListView.View>
    </ListView>
    

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WPFTest
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                var dahList = new List<StatsOperation>();
                dahList.Add(new StatsOperation
                {
                    Operation = "Op A",
                    Choices = new string[] { "One", "Two", "Three" },
                });
                dahList.Add(new StatsOperation
                {
                    Operation = "Op B",
                    Choices = new string[] { "4", "5", "6" },
                });
                this.MyListView.ItemsSource = dahList;
            }
        }
    
        internal class StatsOperation
        {
            public string Operation { get; set; }
            public string[] Choices { get; set; }
        }
    }