绑定显示日期和显示日期从另一个日期选取器值开始



我有两个日期选择器。第一个日期选取器设置第二个日期选取器的 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 中获取值。如果是我,我会有两个视图模型属性:DisbursalDatePickerOtherDateValueDisbursalDatePicker的二传手会在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();
}
}
}

最新更新