我有两个日期选择器。第一个日期选取器设置第二个日期选取器的 DisplayDate 和 DisplayDateStart。下面的代码将 DisplayDate 和 DisplayDateStart 设置正确,我遇到的问题是,当我使用第二个日期选择器选择日期时,它还会更新第一个日期选择器选择的日期。请问我该如何解决这个问题?
例如
DP1.SelectedDate = january 1 2017
如果我更改 DP2。选定日期为 2017 年 2 月 3 日,DP1。选择日期也会更改为该日期。
<telerik:RadDatePicker SelectedDate="{Binding DisbursalDatePicker, Mode=TwoWay}"/>
<telerik:RadDatePicker DisplayDateStart="{Binding DisbursalDatePicker, Mode=TwoWay}"
DisplayDate="{Binding DisbursalDatePicker, Mode=TwoWay}"/>
我也尝试将DisplayDateStart和DisplayDate设置为OneWay,但DisplayDate无法正常工作,它显示DateTime.Now而不是显示DisbursalDatePicker。
我试图使帖子尽可能简单,以便任何人都可以对其进行测试,但我相信这可能是 Telerik 控件的问题。此问题仅发生在 telerik:RadDatePicker 上,而不是 wpf DatePicker
Mode=TwoWay
在DatePicker.SelectedDate
上是多余的;当创建依赖属性时,框架将其作为属性绑定的默认值。
DatePicker.DisplayDate
似乎没有多大好处:我通过实验所能找到的是,如果SelectedDate
为空,DisplayDate
将是日历弹出窗口中初始突出显示的日期。我可以看到这是多么有用,但这不是你想要的。MSDN甚至不承认有猜测。MSDN的WPF文档令人失望。
如果我了解您的要求,这有效:
<DatePicker
SelectedDate="{Binding DisbursalDatePicker}"/>
<DatePicker
DisplayDateStart="{Binding DisbursalDatePicker}"
SelectedDate="{Binding DisbursalDatePicker, Mode=OneWay}"
/>
当我更改第一个日期选择器时,它会在第二个日期选择器上更新DisplayDateStart
。第二个更新以在DisbursalDatePicker
更改时显示DisbursalDatePicker
,但在我与之交互时不会更新DisbursalDatePicker
本身。
不过,我不确定它有什么用,因为视图模型无法从第二个 DatePicker 中获取值。如果是我,我会有两个视图模型属性:DisbursalDatePicker
和OtherDateValue
。DisbursalDatePicker
的二传手会在DisbursalDatePicker
发生变化时更新OtherDateValue
,但反之则不然。
<DatePicker
SelectedDate="{Binding DisbursalDatePicker}"/>
<DatePicker
DisplayDateStart="{Binding DisbursalDatePicker}"
SelectedDate="{Binding OtherDateValue}"
/>
我可能会让DisbursalDatePicker
设置器更聪明一点:仅当OtherDateValue
的值无效时才更新OtherDateValue
:
private DateTime _disbursalDatePicker = default(DateTime);
public DateTime DisbursalDatePicker
{
get { return _disbursalDatePicker; }
set
{
if (value != _disbursalDatePicker)
{
_disbursalDatePicker = value;
if (OtherDateValue.CompareTo(DisbursalDatePicker) < 0)
{
OtherDateValue = DisbursalDatePicker;
}
OnPropertyChanged();
}
}
}