【问题标题】:DateTimePicker OnValueChanged event sending old valueDateTimePicker OnValueChanged 事件发送旧值
【发布时间】:2018-03-23 16:28:28
【问题描述】:

我正在使用扩展 WPF 工具包库版本 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);
}

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

【问题讨论】:

    标签: wpf xaml mvvm data-binding datetimepicker


    【解决方案1】:

    您可以推迟检查该值。

    Application.Current.Dispatcher.InvokeAsync(new Action(() => 
    {  
         // work with the object
    
    }), DispatcherPriority.ContextIdle);
    

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

    【讨论】:

    • 你改变我的方法是对的。我的想法是使用命令,因为我需要将收到的 DateTime 格式化为字符串,但我可以在其他地方进行。我很好奇,是否将逻辑放入模型的设置器中以针对 MVVM 结构进行转换?
    • 取决于您与谁交谈。将数据从模型对象复制到视图模型对象以避免污染模型是相当常见的。有人会说,抄都是浪费时间,收效甚微。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多