我正在设法用欧洲符号存储 my DateTime
-object。现在,当我将文本框绑定到对象的DateTime
-property时,它显示为MM/dd/yyyy :mm(或PM)。我想把它保存在这个表示法中的原因是我不能通过ToString("dd/MM/yyyy HH:MM")
修改这个表示法,因为相同的属性也被用来更新其他的DateTime
-properties。这将需要大量重写(每次我检索字符串来设置另一个对象的DateTime时,我都必须将其返回到一个DateTime
-format),因此我正在试图找出是否有一种方法可以将它保存在所需的符号中。
一个很明显不起作用的例子,但是让我想起了这个想法,
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时,我将我的视图模型设置为数据文本,我的绑定如下所示,
<TextBox Text="{Binding SelectedObject.ModifiedAt, Mode=OneWay}"/>
发布于 2016-12-01 10:18:05
用xaml格式化您的DateTime属性。
<TextBox Text="{Binding MyDateTimeProperty, StringFormat='dd/MM/yyyy HH:mm'}"/>
发布于 2016-12-01 09:59:41
要在不同的区域性(如欧洲)中显示DateTime
,您需要为线程设置区域性,而且由于您必须在应用程序中使用Threads
和Tasks
,所以必须使用下面的代码来设置将来将创建的所有线程和任务的默认区域性。
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("de-DE");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("de-DE");
如果只需要更改当前的线程区域性:
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.DefaultThreadCurrentCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.DefaultThreadCurrentCulture;
就像你一样,我有一个TextBox:
<TextBox x:Name="textBox"/>
如果我将当前日期/时间设置为Text
属性:
textBox.Text = DateTime.Now.ToString();
日期将显示为01.12.2016 13:27:58
我的Windows区域性已设置为en-us
格式,因为您可以看到textbox
值是de-De
格式的。
更新1:
为了设置默认区域性,我建议在App
类中创建一个新的构造函数,如下所示,我试过了,它可以工作。
public partial class App : Application
{
public App()
:base()
{
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("de-DE");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("de-DE");
}
}
https://stackoverflow.com/questions/40907074
复制相似问题