【问题标题】:DatePicker binding doesnt workDatePicker 绑定不起作用
【发布时间】:2015-12-12 18:09:39
【问题描述】:
<DatePicker HorizontalAlignment="Left"  Date="{Binding CzechzIn,UpdateSourceTrigger=PropertyChanged , Mode=TwoWay}"  Height="35" Margin="785,265,0,0" VerticalAlignment="Top" Width="265"/>

<DatePicker HorizontalAlignment="Left"  SelectedDate="{Binding CzechOut, Mode = TwoWay}" Height="35" Margin="785,328,0,0" VerticalAlignment="Top" Width="286"/>

编辑:

错误出在绑定中。显然 DatePicker 框搞砸了,“Page”属性没有做任何事情(?)。

第一行代码是原始代码,它什么也不做。在谷歌搜索后,人们建议使用 SelectedDate 但它说 错误在类型“DatePicker”中找不到属性“SelectedDate”。 如何解决这个问题?

【问题讨论】:

  • CheckIn &gt; DateTime.Now Checkin 永远不可能大于 DateTime.Now。还要意识到DateTime 对象始终是日期和时间,并且精确到毫秒。 IE。 CheckIn = DateTime.Now; 然后在下一个语句中,检查相等性:CheckIn == DateTime.Now; 它们可能不同,即使只有一毫秒。或者他们可能不会。在后续的执行中你可能会得到不同的答案。
  • CheckIn 应该是在未来。我应该绑定到日期选择器。

标签: c# xaml datetime data-binding datepicker


【解决方案1】:

您的重叠逻辑是错误的。正确的算法可以在此处接受的答案中看到:Algorithm to detect overlapping periods

DateCalc 看起来正确,它是如何失败的?您应该考虑在此类代码中使用 DateTime.Today 而不是 .Now ,以避免因 .Now 的时间组件引起的一个错误而令人讨厌 - 但我猜目前尚不清楚是否可以从当前日期预订。

【讨论】:

  • 谢谢!该算法更有意义,但它只会产生相反的结果,让我相信它不起作用的原因是代码中的其他地方。
  • 而且 DateCalc 神秘地无法正常工作。我不知道为什么。
【解决方案2】:

试试这个:(ps。为了我自己的理智,我更改(并假设)了您的函数名称:D 我认为您也应该这样做)

DateCalc(您的代码应该是正确的,但这里有一个较短的版本):

public bool isCheckInOutOk() 
{
    return (CheckIn < CheckOut) && (CheckIn > DateTime.Now);
}

日期计算2:

public bool isOverlapping()
{
    foreach (Booking book in Books) 
    {
        if (book.CheckInDateTime < CheckOut && CheckIn < book.CheckOutDateTime)
            return true;
        }
    }
    return false;
}

所以,你可以使用:

if (IsConfirmed && isCheckInOutOk() && !isOverlapping())

PS。离开我的头顶,所以没有真正测试过。 isOverlapping 归功于 Rawling (https://stackoverflow.com/a/13513973/189554)

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 2018-02-12
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多