我有一个简单的表单,有两个 DateTimePicker 控件:一个用于日期,一个用于时间。问题是这两个控件应该代表一个时间点。因此,我想将它们“绑定(bind)”到表单上的单个 DateTime 属性(为了简单起见)。我做了以下事情:
// Start is a DateTime property on the form
_StartDate.DataBindings.Add("Value", this, "Start");
_StartTime.DataBindings.Add("Value", this, "Start");
但是 Hook “ValueChanged”事件会产生混合结果...有时我得到了我想要的,有时属性的更新“缓慢”。我认为这种分成两个 DateTimePicker 的方式相当常见。那么该怎么做呢?
更新:其中可能有多个问题:
- 如何将 DateTimePicker(格式:日期)绑定(bind)到表单上的 DateTime 属性?
- 那么,如何将另一个 DateTimePicker(格式:时间)绑定(bind)到同一属性?
- 我使用的是 Visual Studio Express 2008 (.NET 3.5),并且我似乎在值更改之前从 DateTimePickers 获取了 ValueChanged 事件?
最佳答案
我发现自己有时会遇到这个问题,并且我使用了一种有点丑陋的技术。我没有直接绑定(bind)到该属性,而是在模型上创建了两个附加属性。
//The data I want to bind to
public DateTime Something { get; set; }
//Two new properties
public DateTime SomethingDate { /*...*/ }
public DateTime SomethingTime { /*...*/ }
每个的 get
部分应该只返回 Something
。 set
部分是您实现一点逻辑的地方,以确保 Something
始终准确反射(reflect)。
public DateTime SomethingDate
{
get
{
return this.Something;
}
set
{
this.Something = value.Date.Add(this.Something.TimeOfDay);
}
}
public DateTime SomethingTime
{
get
{
return this.Something;
}
set
{
this.Something = this.Something.Date.Add(value.TimeOfDay);
}
}
现在,您的 Something
属性将始终正确反射(reflect)两个控件相应的日期和时间,同时仅使用我们关心的每个控件的信息更新值。
关于c# - 如何将双 DateTimePicker 数据绑定(bind)到单个 DateTime 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723729/