7

我有一个 dateTimePicker。为了将此 DateTimePicker 内容写入我的数据库,我通过以下方式获取值:

myDateTimePicker.selectedDate.value.

用户手动选择日期就可以了。

但是......当用户直接在 DateTimePicker 中键入日期时,SelectedDate.value给我较旧的值。物有所值,在.Text财产。

有没有办法与.Text同步.SelectedValue.value

也许我需要阅读其他财产?

4

3 回答 3

2

发生这种情况是因为仅当控件失去焦点时才执行验证。通常像这样的控件在对话框(即 ShowDialog)上,通过激活 OK 按钮(直接或间接通过 AcceptButton 属性)来完成对话框。这会导致控件失去焦点并验证自身。

如果您在无模式窗口上使用 DateTimePicker,您需要在使用其选定值之前从它移除焦点,以便它执行验证。

于 2013-03-15T16:14:01.680 回答
1

可以在代码中使用这些转换进行运行时处理。也可以使用“on change”方法,但这是最快的方法。它们甚至也可以用于这些方法。

日期到文本转换

setdate.Text = setdate.SelectedDate.ToString();

文本到日期的转换(如果格式可以接受)

setdate.SelectedDate = DateTime.Parse(setdate.Text);
于 2018-04-21T01:15:24.683 回答
0

您可以使用扩展 WPF 工具包中的DateTimePicker

有属性Value,当您开始在此控件的文本框中输入值时,输入的值将自动分配给您的绑定属性。

例子:

XAML:

<extToolkit:DateTimePicker Value="{Binding MyDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

其中“extToolkit”是:

xmlns:extToolkit="http://schemas.xceed.com/wpf/xaml/toolkit"

视图模型类:

class MainViewModel : INotifyPropertyChanged
{
    private DateTime _myDate;

    public DateTime MyDate
    {
        get { return _myDate; }
        set 
        { 
            _myDate = value; 
            OnPropertyChanged("MyDate"); 
            // only for testing...
            Console.WriteLine("value: " + value);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}
于 2013-03-15T16:13:06.673 回答