我有一个 dateTimePicker。为了将此 DateTimePicker 内容写入我的数据库,我通过以下方式获取值:
myDateTimePicker.selectedDate.value.
用户手动选择日期就可以了。
但是......当用户直接在 DateTimePicker 中键入日期时,SelectedDate.value给我较旧的值。物有所值,在.Text财产。
有没有办法与.Text同步.SelectedValue.value?
也许我需要阅读其他财产?
我有一个 dateTimePicker。为了将此 DateTimePicker 内容写入我的数据库,我通过以下方式获取值:
myDateTimePicker.selectedDate.value.
用户手动选择日期就可以了。
但是......当用户直接在 DateTimePicker 中键入日期时,SelectedDate.value给我较旧的值。物有所值,在.Text财产。
有没有办法与.Text同步.SelectedValue.value?
也许我需要阅读其他财产?
发生这种情况是因为仅当控件失去焦点时才执行验证。通常像这样的控件在对话框(即 ShowDialog)上,通过激活 OK 按钮(直接或间接通过 AcceptButton 属性)来完成对话框。这会导致控件失去焦点并验证自身。
如果您在无模式窗口上使用 DateTimePicker,您需要在使用其选定值之前从它移除焦点,以便它执行验证。
可以在代码中使用这些转换进行运行时处理。也可以使用“on change”方法,但这是最快的方法。它们甚至也可以用于这些方法。
日期到文本转换
setdate.Text = setdate.SelectedDate.ToString();
文本到日期的转换(如果格式可以接受)
setdate.SelectedDate = DateTime.Parse(setdate.Text);
您可以使用扩展 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));
}
}
}