0

I'm trying to populate the dropdown list within the Grid column but it's empty. The Grid column is defined like this:

                <DataGridTemplateColumn  Header="Voucher Type" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding VoucherType}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox SelectedItem="{Binding VoucherType}" ItemsSource="{Binding Path=DataContext.VTypes, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>

The context class has the source defined like this:

        public static ObservableCollection<string> VType { get; } = new ObservableCollection<string>()
    {
        "Journal Voucher",
        "Cash Received Voucher",
        "Cash Payment Voucher",
        "Bank Received Voucher",
        "Bank Payment Voucher",
    };

Can someone please point to what I'm doing wrong?

Thanks.

Ahmed Mujtaba
  • 2,110
  • 5
  • 36
  • 67
  • Check this link may you help you https://stackoverflow.com/questions/7088284/wpf-datagridtemplatecolumn-with-combobox-binding-mvvm-pattern – Pratius Dubey Jul 23 '18 at 10:43

1 Answers1

-1

Here is simple code how to add combobox in DataGrid.

Xaml Code:

<Grid>
    <DataGrid Margin="5" ItemsSource="{Binding}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Capital" Binding="{Binding Capital}"/>
            <DataGridTextColumn Header="Time Zone" Binding="{Binding TimeZone}"/>
            <DataGridTemplateColumn Header="Cities" Width="*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox Margin="2" ItemsSource="{Binding Cities}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

private ObservableCollection<State> states = new ObservableCollection<State>();
   public MainWindow()
    {
        InitializeComponent();

        states.Add(new State()
        {
            Name = "Maryland",
            Capital = "Annapolis",
            TimeZone = "Eastern",
            Cities = new ObservableCollection<string>() { "Frederick", "Baltimore", "Rockville"}
        });

        DataContext = states;
    }
}

Model:

 public class State
{
    public string Name
    { get; set; }

    public string TimeZone
    { get; set; }

    public string Capital
    { get; set; }

    public ObservableCollection<string> Cities
    { get; set; }
}

Hope this code may be help you.

Pratius Dubey
  • 673
  • 6
  • 19