问题描述
如果我尝试使用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 (将#修改为@)