Data binding WPF数据绑定在编程生成的DataGrid中未正确发生

Data binding WPF数据绑定在编程生成的DataGrid中未正确发生,data-binding,wpfdatagrid,Data Binding,Wpfdatagrid,在我的应用程序中,我以编程方式生成一个datagrid,并将其与一个列表绑定。我可以看到datagrid中的数据,但当我编辑单元格时,列表中的基础项不会得到更新。这是密码 Window dateChangeWindow = new Window(); dateChangeWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner; dateChangeWindow.Owner = Application.Current.Mai

在我的应用程序中,我以编程方式生成一个datagrid,并将其与一个列表绑定。我可以看到datagrid中的数据,但当我编辑单元格时,列表中的基础项不会得到更新。这是密码

Window dateChangeWindow = new Window();
dateChangeWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
dateChangeWindow.Owner = Application.Current.MainWindow;
dateChangeWindow.SizeToContent = SizeToContent.WidthAndHeight;
dateChangeWindow.Title = "Date Change";

StackPanel stackPanel = new StackPanel();
stackPanel.Orientation = Orientation.Vertical;

DataGrid requestGrid = new DataGrid();
requestGrid.CanUserResizeColumns = false;
requestGrid.CanUserResizeRows = false;
requestGrid.CanUserReorderColumns = false;
requestGrid.CanUserSortColumns = true;
requestGrid.AutoGenerateColumns = false;

DataGridTextColumn requestIdColumn = new DataGridTextColumn();
requestIdColumn.Header = "Request Id";
Binding idBinding = new Binding("RequestId");
idBinding.Mode = BindingMode.OneWay;
requestIdColumn.Binding = idBinding;
requestGrid.Columns.Add(requestIdColumn);

DataGridTemplateColumn startDateColumn = new DataGridTemplateColumn();
startDateColumn.Header = "Start Date";
Binding startDateBinding = new Binding("StartDate");
startDateBinding.Mode = BindingMode.TwoWay;
FrameworkElementFactory startDateFactory = new FrameworkElementFactory(typeof(DatePicker));
startDateFactory.SetBinding(DatePicker.SelectedDateProperty, startDateBinding);
DataTemplate startDateTemplate = new DataTemplate();
startDateTemplate.VisualTree = startDateFactory;
startDateColumn.CellTemplate = startDateTemplate;
startDateColumn.CellEditingTemplate = startDateTemplate;
requestGrid.Columns.Add(startDateColumn);

DataGridTemplateColumn endDateColumn = new DataGridTemplateColumn();
endDateColumn.Header = "End Date";
Binding endDateBinding = new Binding("EndDate");
endDateBinding.Mode = BindingMode.TwoWay;
FrameworkElementFactory endDateFactory = new FrameworkElementFactory(typeof(DatePicker));
endDateFactory.SetBinding(DatePicker.SelectedDateProperty, endDateBinding);
DataTemplate endDateTemplate = new DataTemplate();
endDateTemplate.VisualTree = endDateFactory;
endDateColumn.CellTemplate = endDateTemplate;
endDateColumn.CellEditingTemplate = endDateTemplate;
requestGrid.Columns.Add(endDateColumn);

requestGrid.ItemsSource = requestList;
requestGrid.Margin = new Thickness(0, 10, 0, 0);
requestGrid.HorizontalAlignment = HorizontalAlignment.Center;

stackPanel.Children.Add(requestGrid);

Button changeDoneBtn = new Button();
changeDoneBtn.Content = "Submit";
changeDoneBtn.Click += new RoutedEventHandler(changeDone_Click);
changeDoneBtn.Margin = new Thickness(0, 20, 0, 10);
changeDoneBtn.HorizontalAlignment = HorizontalAlignment.Center;

stackPanel.Children.Add(changeDoneBtn);

dateChangeWindow.Content = stackPanel;
dateChangeWindow.ShowDialog();
ItemsSource
requestList
在创建窗口之前填充。它被宣布为

IList<DateChangeWrapper> requestList = new List<DateChangeWrapper>();
从代码中可以看到,我有两列StartDate和EndDate,它们显示为日期选择器。当我调试代码时,在调用window.ShowDialog的地方,我看到调用日期的get访问器。但是,当我在datepicker中更改值时,不会调用setter,并且我的列表仍然具有旧值


请帮助我

问题是,由于UpdateSourceTrigger,更改的值没有更新回基础源。默认情况下,其值为LostFocus。我把它改成了PropertyChanged,它成功了!:)

我在绑定中添加了以下代码行

startDateBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
EndDate也是如此

startDateBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;