DateTimePicker OnValueChanged事件发送旧值

时间:2018-03-23 16:28:29

标签: wpf xaml mvvm data-binding datetimepicker

我正在使用Extended WPF Toolkit库3.3.0版本中的DateTimePicker WPF控件。

我遇到的问题是,当我触发ValueChanged事件时,我在更改之前收到了值,而不是之后。

我的XAML看起来像这样:

<xctk:DateTimePicker x:Name="dtTo" FontWeight="Bold" FontSize="12" Grid.Row="3" Grid.Column="1" Grid.RowSpan="1" Grid.ColumnSpan="1" Margin="2">
<ie:Interaction.Triggers>
    <ie:EventTrigger EventName="ValueChanged">
        <ie:InvokeCommandAction Command="{Binding DateToChangedCommand}"  CommandParameter="{Binding ElementName=dtTo, Path=Value}"/>
    </ie:EventTrigger>
</ie:Interaction.Triggers>

我的命令如下:

public ICommand DateFromChangedCommand
{
    get
    { 
        return new DelegateCommandObject(new Action<object>((parameter) => DateFromChanged(parameter)));
    }
}

我的DelegateCommand类看起来像这样:

public class DelegateCommandObject : ICommand
{
    public Action<object> commandTask;

    public DelegateCommandObject(Action<object> workToDo)
    {
        commandTask = workToDo;
    }

    public event EventHandler CanExecuteChanged;

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        commandTask.Invoke(parameter);
    }
}

被解雇的方法如下:

public void DateFromChanged(object parameter)
{
    if (parameter == null)
        return;

    DateTime? dt = parameter as DateTime?;
    This.Options.DateFrom = String.Format("{0:yyyy-MM-ddTHH:mm:ss}", dt);
}

我可以做些什么来确保在更改之后获取值,而不是之前?

1 个答案:

答案 0 :(得分:1)

您可以推迟检查值。

Application.Current.Dispatcher.InvokeAsync(new Action(() => 
{  
     // work with the object

}), DispatcherPriority.ContextIdle);

但我认为你的整个方法看起来很奇怪。 我会将日期(Value)绑定到viewmodel中的完整属性,并且当更改日期时,setter将获取新值。你有一个命令,所以你可能已经有了某种视图模型。