'Edit Datagrid in WPF

How I can provide ComboBox to a particular DataGrid Column in wpf when user tries to edit data grid . For example user can change the Operator at run time from ">" , "<", "=", ">=", "<=". Also how can I stop user from entering negative values are in Value column

MainWindow.xaml.cs

namespace EditableDataGridApp
{
    
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            mydatagrid.ItemsSource = fields.Rule();
        }
    }
}

MainWindow.Xaml

  <Grid>
        <DataGrid Name="mydatagrid" AutoGenerateColumns="False" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" IsReadOnly="True"></DataGridTextColumn>
                <DataGridTextColumn Header="Operator" Binding="{Binding Path=Operator}"></DataGridTextColumn>
                <DataGridTextColumn Header="Value" Binding="{Binding Path=Value}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

Field.cs

namespace EditableDataGridApp
{
    class fields
    {
        public string Name { get; set; }

        public string Operator { get; set; }

        public int Value { get; set; }


        public static ObservableCollection<fields> Rule()
        {
            ObservableCollection<fields> a = new ObservableCollection<fields>();
            a.Add(new fields() {Name = "length", Operator= "=", Value =5 });
            a.Add(new fields() { Name = "Width", Operator =">", Value = 6 });
             a.Add(new fields() { Name = "Height", Operator = "<", Value = 8 });
            return a;

        }
}


Solution 1:[1]

Combobox can be created by

<DataGridComboBoxColumn Header="Operator" x:Name="Operator" SelectedValueBinding="{Binding Path=Operator, Mode=TwoWay,UpdateSourceTrigger=LostFocus}" ItemsSource="{Binding Operators}" ></DataGridComboBoxColumn>

Itemsource for ComboBox will be the list of all the elements you want in your dropdown.

public List<String> Operators;

 Operators = new List<string>();
            Operators.Add("=");
            Operators.Add("<");
            Operators.Add(">");
            Operators.Add(">=");
            Operators.Add("=<");

You can write this code of providing list of operators in xaml.cs file

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Leo