【问题标题】:TwoWay Binding a DateTime To a TextBox - Year only双向将日期时间绑定到文本框 - 仅限年份
【发布时间】:2014-10-17 01:13:09
【问题描述】:

如何将 DateTime 绑定(TwoWay)到 TextBox,以便仅显示 DateTime 的年份,并且 TextBox 也接受输入作为年份(即用户可以键入“2014”,这将成功绑定到日期时间)?

我有以下几点:

TextBox Margin="10, 1" MinWidth="100" Text="{Binding LastGoodDate, StringFormat={}{0:yyyy}}" >

成功以 yyyy 格式显示 DateTime,但是当用户键入“2014”时绑定失败。

我可以通过绑定到一个中间字符串属性来解决这个问题,然后手动解析结果并将其存储在 DateTime 中,但如果可能的话,我想避免这种情况。

有什么想法吗?

【问题讨论】:

    标签: c# wpf datetime binding


    【解决方案1】:

    通过添加一个单独的“Year”属性,在视图模型中执行此操作可能是最简单的。例如:

    TextBox Text="{Binding LastGoodYear}" >
    

    属性不应有自己的支持字段,但应根据需要修改日期:

    public int LastGoodYear
    {
        get 
        {
            return LastGoodDate.Year; 
        }
        set
        {
            LastGoodDate = new DateTime(value, LastGoodDate.Month, LastGoodDate.Day);
        }
    }
    

    还要确保在“LastGoodDate”设置器中触发“PropertyChanged”(LastGoodYear)。

    【讨论】:

    • 谢谢,这是我希望避免的(代表年份的支持属性),但我会将其标记为已回答,因为我最终选择了这样的东西。
    • @D.Reagan 我想你可以通过使用带有转换器的 MultiBinding 来避免支持属性——但额外的属性似乎更简单。
    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2011-11-22
    • 2018-05-11
    相关资源
    最近更新 更多