使用CellEditEnding事件验证WPF数据网格中的DatePicker值
我正在使用WPF DataGrid的CellEditEnding事件来验证数据并执行其他计算。我有文本框和日期选择器作为DataGridTemplateColumns 下面是我如何调用事件处理程序使用CellEditEnding事件验证WPF数据网格中的DatePicker值,wpf,datagrid,Wpf,Datagrid,我正在使用WPF DataGrid的CellEditEnding事件来验证数据并执行其他计算。我有文本框和日期选择器作为DataGridTemplateColumns 下面是我如何调用事件处理程序 private void OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { if (e.EditAction == DataGridEditAction.Cancel) return
private void OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Cancel) return;
DataGridCellEditEndingCommandParameter p = new DataGridCellEditEndingCommandParameter();
if (e.Column != null)
{
p.BindingPropertyName = e.Column.SortMemberPath;
if (e.Column.Header != null)
p.ColumnHeaderName = e.Column.Header.ToString();
}
TextBox t = e.EditingElement as TextBox;
if (t != null)
p.EndingElementValue = t.Text;
//else if (e.EditingElement as DatePicker)
if (e.Row != null) p.RowItem = e.Row.Item;
p.EventArgs = e;
p.Sender = sender as DataGrid;
CommandParameter = p;
ExecuteCommand();
}
我将EditingElement转换为TextBox以读取用户输入的值,对DatePicker执行相同的操作,但在编辑DatePicker时会导致null
<DataGridTemplateColumn x:Name="fxFwd" Header="Value Date" Width="70" SortMemberPath = "fwFwdDate" CanUsersort = "True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path= fxFwdDate,
ConverterCulture={x:Static gl:CultureInfo.CurrentCulture},
StringFormat=\{0:d\}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Path=fxFwdDate,
ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}, Mode=TwoWay,
ValidatesOnExceptions=true, NotifyOnValidationError=true}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
当我在更改DatePicker的值后检查EditingElement时,它将作为ContentPresenter而不是DatePicker接收
提前感谢在
日期选择器
控件上设置x:Name
-
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker x:Name="datePicker" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
ContentPresenter contentPresenter = e.EditingElement as ContentPresenter;
DataTemplate editingTemplate = contentPresenter.ContentTemplate;
DatePicker dp = editingTemplate.FindName("datePicker", contentPresenter)
as DatePicker ;