DateTimePicker OnValueChanged 事件发送旧值
DateTimePicker OnValueChanged event sending old value
我正在使用扩展 WPF 工具包库中的 DateTimePicker WPF 控件,版本 3.3.0。
我遇到的问题是,当我触发 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 class 看起来像这样:
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);
}
如何确保在更改后而不是之前获得值?
您可以推迟检查值。
Application.Current.Dispatcher.InvokeAsync(new Action(() =>
{
// work with the object
}), DispatcherPriority.ContextIdle);
但我认为您的整个方法看起来很奇怪。
我会将日期(值)绑定到视图模型中的完整 属性,当日期更改时,setter 获取新值。你在那里有一个命令,所以你可能已经有了某种视图模型。
我正在使用扩展 WPF 工具包库中的 DateTimePicker WPF 控件,版本 3.3.0。
我遇到的问题是,当我触发 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 class 看起来像这样:
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);
}
如何确保在更改后而不是之前获得值?
您可以推迟检查值。
Application.Current.Dispatcher.InvokeAsync(new Action(() =>
{
// work with the object
}), DispatcherPriority.ContextIdle);
但我认为您的整个方法看起来很奇怪。 我会将日期(值)绑定到视图模型中的完整 属性,当日期更改时,setter 获取新值。你在那里有一个命令,所以你可能已经有了某种视图模型。