【发布时间】:2016-12-01 09:39:22
【问题描述】:
我正在尝试找到一种方法以欧洲表示法存储我的DateTime-object。现在,当我将文本框绑定到对象的DateTime-property 时,它显示为 MM/dd/yyyy HH:mm AM(或 PM)。我想以这种表示法保存它的原因是我不能通过ToString("dd/MM/yyyy HH:MM") 更改表示法,因为同样的属性也用于更新其他DateTime-properties。这将需要大量重写(每次我检索字符串以设置另一个对象的 DateTime,我都必须将TryParse 重新设置为DateTime-格式),所以我试图找出是否有办法将其保存为所需的符号。
一个显然行不通的例子,但让人思考,
public DateTime<dd/MM/yyyy HH:mm> ModifiedAt { get; set; }
我试着看看我是否可以强制它以这样的不同格式进行跟踪,
public DateTime ModifiedAt
{
get { return this.modifiedAt; }
set
{
var s = value.ToString("dd/MM/yyyy HH:mm");
DateTime.TryParse(s, out this.modifiedAt);
this.RaisePropertyChanged();
}
}
但无济于事。由于我开始怀疑这是可能的,我很好奇是否有人以前遇到过这个问题。也许有一种方法可以改变绑定声明中的显示字符串?当我使用 MVVM 时,我将我的视图模型设置为 datacontext,我的绑定看起来像这样,
<TextBox Text="{Binding SelectedObject.ModifiedAt, Mode=OneWay}"/>
【问题讨论】:
-
您是否尝试为当前线程(或当前的ui线程)设置
culture? -
不要以任何格式存储
DateTimes,将它们存储为DateTime。当你想显示它们时格式化它们,f.e.与DateTime.ToString。DateTime从来没有隐式格式,它只有一个值,就像一个数字。 -
@AliBahraminezhad 我对此进行了调查,但是(如果我理解正确的话)它的行为会不一致,因为我使用了很多
await Task.Run() -
@TimSchmelter 好的,所以我应该研究如何让我的绑定调用
ToString而我仍然可以让MyObject.ModifiedAt返回DateTime-property? -
好的,你为什么不直接设置
CultureInfo.DefaultThreadCurrentCulture和CultureInfo.DefaultThreadCurrentUICulture它对所有线程和任务都是全局的。我在这里写了一个答案stackoverflow.com/questions/40896455/…