I have a dataGrid
with ItemSourse={Binding}
, and I have a DataContext
in my Window
class, which I install from code before I open the window, and everything works fine. But, I had to replace the cells of one of the columns with the ComboBox
, I did it like this:
DataGridTemplateColumn column = new DataGridTemplateColumn(); //create the data template DataTemplate cellLayout = new DataTemplate(); cellLayout.DataType = typeof(DataGridTemplateColumn); //set up the ComboBox OrderedDictionary dictionary = DriverService.GetDriversDictionary(); FrameworkElementFactory cbFactory = new FrameworkElementFactory(typeof(ComboBox)); cbFactory.Name = "myComboFactory"; cbFactory.SetValue(ComboBox.ItemsSourceProperty, dictionary); cbFactory.SetValue(ComboBox.SelectedValuePathProperty, "Key"); cbFactory.SetValue(ComboBox.DisplayMemberPathProperty, "Value"); Binding bind = new Binding("/driverId"); bind.Converter = new DriverIdConverter(); bind.ConverterParameter = dictionary; bind.Source = DataContext; bind.Mode = BindingMode.TwoWay; cbFactory.SetBinding(ComboBox.SelectedValueProperty, bind); //set the visual tree of the data template cellLayout.VisualTree = cbFactory; //set the item template to be our shiny new data template column.CellTemplate = cellLayout; column.CellEditingTemplate = cellLayout; dataGrid.Columns[index] = column;
And that's what happens, Binding("/driverId")
always returns the first ItemSourse
element, but this is the path to the current elements. So what am I doing wrong?