在WPF C#应用程序中使用Xceed DateTimePicker时,为什么在使用OneWay绑定时该值仅更新一次?

问题描述

如果我尝试使用Xceed DateTimePicker控件(当前为v4.0.1)并使用OneWay绑定到视图模型上的属性,则会发现该控件中的值仅更新一次(它在初始值之后第一次更改),但是随后对视图模型属性的任何更改都不会导致DateTimePicker值(至少在视觉上)更新。

要清楚,绑定似乎至少可以工作两次:初始值是通过视图模型正确设置的,并且是第一次更新视图模型属性时,正确显示了更新后的值在控制中。但是,对该属性的所有后续更新都不会影响控件的值:就像它在第一次更改后被“卡住”。为了查看我是否完全不符合WPF的绑定期望,我还定义了一个普通的TextBox,其XAML中的OneWay绑定在绑定了相同内容的DateTimePicker旁边属性在视图模型上,并且完全按预期更新-不会卡住。似乎像我期望的那样,使用OneWay绑定就可以了。

以下是相关XAML的代码段:

<xctk:DateTimePicker
    x:Name="DateTakenPicker"
    Value="{Binding Path=DateTaken,Mode=OneWay}"
/>
<TextBox
    x:Name="DateBox"
    TextWrapping="WrapWithOverflow"
    Text="{Binding Path=DateTaken,Mode=OneWay}"
/>

以及相关的视图模型属性:

private DateTime? _dateTaken = null;
public DateTime? DateTaken
{
    get { return _dateTaken; }
    set
    {
        if (_dateTaken != value)
        {
            _dateTaken = value;
            NotifyPropertyChanged();
        }
    }
}
...
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
    PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
}

每当代码更改DateTaken属性时,TextBox 始终中显示的值都会更改为匹配,但是DateTimePicker中显示的日期仅显示值,然后在第一次更改后。第二到N次更改只会更改文本框中的值。

我还验证了,如果我将DateTimePicker上的绑定更改为TwoWay,那么它的行为将与预期的一样:也就是说,所有更改总是 正确地反映在DateTimePicker中,而不仅仅是第一次更改。但是...为什么只在TwoWay绑定而不是OneWay绑定时发生?

还要清楚一点,我从不单击DateTimePicker控件,也不会对其进行改动,甚至只是摆弄它们,只是使代码更改了DateTaken值并观察了对控件的影响。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...