Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CellEditEnding事件验证WPF数据网格中的DatePicker值_Wpf_Datagrid - Fatal编程技术网

使用CellEditEnding事件验证WPF数据网格中的DatePicker值

使用CellEditEnding事件验证WPF数据网格中的DatePicker值,wpf,datagrid,Wpf,Datagrid,我正在使用WPF DataGrid的CellEditEnding事件来验证数据并执行其他计算。我有文本框和日期选择器作为DataGridTemplateColumns 下面是我如何调用事件处理程序 private void OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { if (e.EditAction == DataGridEditAction.Cancel) return

我正在使用WPF DataGrid的CellEditEnding事件来验证数据并执行其他计算。我有文本框和日期选择器作为DataGridTemplateColumns

下面是我如何调用事件处理程序

    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 ;