如何绑定到DateTime(可能有一个DatePicker和一个TextBox)

时间:2014-04-28 14:16:57

标签: wpf xaml datetime datepicker

我总是对DateTime类型感到困惑。在我们的WPF程序中,我们有ViewModel公开的DateTime属性,需要绑定到View中的Control / Controls。但显然因为DateTime同时包含日期部分和时间部分,我们想要显示它们/让用户同时修改它们。所以我认为我们需要一个DatePicker作为日期部分,一个TextBox作为时间部分(使用格式字符串),但我想不出在XAML中定义这种控制/绑定的简单方法

使用“WPF DateTime Binding”进行Google搜索并没有给我很多引用(为什么大多数示例都显示了对DatePicker的绑定,当显然是显示时间的有效要求时)。

有人可以告诉我该怎么做吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Extended WPF Toolkit DateTimePicker控件; enter image description here

您可以通过nuget获得此解决方案。然后只需绑定到DateTimePicker的value属性。

XAML:

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="145*"></RowDefinition>
        <RowDefinition Height="31*"></RowDefinition>
        <RowDefinition Height="144*"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <xctk:DateTimePicker Grid.Row="1" Value="{Binding Path=MyDateTime}" Grid.Column="1"/> 
</Grid>

VB:

Imports System.ComponentModel

Class MainWindow : Implements INotifyPropertyChanged

    Private _myDateTime As DateTime = "#28/04/2014 07:11:00 AM#"

    Public Property MyDateTime As DateTime
        Get
            Return _myDateTime
        End Get
        Set(value As DateTime)

            If _myDateTime <> value Then

                _myDateTime = value
                OnPropertyChanged("MyDateTime")

            End If
        End Set
    End Property

    Protected Sub OnPropertyChanged(ByVal PropertyName As String)

        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(PropertyName))

    End Sub

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

    Public Sub New()

        InitializeComponent()

        Me.DataContext = Me

    End Sub
End Class