C# wpf mvvm中的绑定时间跨度,仅显示分钟:秒?
我希望能够在文本框中显示分和秒。C# wpf mvvm中的绑定时间跨度,仅显示分钟:秒?,c#,wpf,mvvm,binding,timespan,C#,Wpf,Mvvm,Binding,Timespan,我希望能够在文本框中显示分和秒。TextBox绑定到一个属性,该属性是TimeSpan。在文本框中,默认值为:“00:00:00” 这很好,但是如何仅显示00:00,其中删除了小时部分 我该怎么做 这是我的装订: public TimeSpan MaxTime { get { if (this.Examination.MaxTime == 0) return TimeSpan.Zero; else r
TextBox
绑定到一个属性,该属性是TimeSpan
。在文本框中,默认值为:“00:00:00”
这很好,但是如何仅显示00:00,其中删除了小时部分
我该怎么做
这是我的装订:
public TimeSpan MaxTime
{
get
{
if (this.Examination.MaxTime == 0)
return TimeSpan.Zero;
else
return maxTime;
}
set
{
maxTime = value;
OnPropertyChanged("MaxTime");
TimeSpan x;
this.Examination.MaxTime = int.Parse(maxTime.TotalSeconds.ToString());
}
}
如果您只需要单向绑定,那么可以使用
StringFormat
:
<TextBlock Text="{Binding MaxTime, StringFormat={}{0:hh':'mm':'ss}}" />
我采用了另一种方法,创建了一个名为
timeappeased
的字符串,在计时器计时期间,我会查看另一个属性,它是秒表(在计时器期间设置),然后如果更改,则设置显示在屏幕上的字符串时间
private Stopwatch StopWatch { get; set; }
private double TimeElapsedDouble { get; set; }
private string _TimeElapsed;
public string TimeElapsed
{
get { return _TimeElapsed; }
set { _TimeElapsed = value; OnPropertyChanged(nameof(TimeElapsed)); }
}
private void timerTick(object sender, EventArgs e)
{
var timeElapsedDuration = StopWatch.Elapsed.Duration(); // Get the timespan.
if (TimeElapsedDouble != timeElapsedDuration.TotalSeconds) // A change happened?
{
TimeElapsedDouble = timeElapsedDuration.TotalSeconds;
TimeElapsed = timeElapsedDuration.ToString(@"mm\:ss"); // Answer is here
}
}
然后根据需要将其绑定到控件
<Label Content="{Binding TimeElapsed}" />
在格式字符串中转义冒号对我不起作用。我不得不把它改成{0:hh':'mm}
,也就是说:
或StringFormat={{0:hh\:mm}这怎么只显示分和秒呢?我知道hh
是小时,而mm
是分钟。@ProfK然后使用“mm:ss”
或您需要的任何格式。我遇到了与@sthlm58相同的问题。这个答案值得补充吗?
private Stopwatch StopWatch { get; set; }
private double TimeElapsedDouble { get; set; }
private string _TimeElapsed;
public string TimeElapsed
{
get { return _TimeElapsed; }
set { _TimeElapsed = value; OnPropertyChanged(nameof(TimeElapsed)); }
}
private void timerTick(object sender, EventArgs e)
{
var timeElapsedDuration = StopWatch.Elapsed.Duration(); // Get the timespan.
if (TimeElapsedDouble != timeElapsedDuration.TotalSeconds) // A change happened?
{
TimeElapsedDouble = timeElapsedDuration.TotalSeconds;
TimeElapsed = timeElapsedDuration.ToString(@"mm\:ss"); // Answer is here
}
}
<Label Content="{Binding TimeElapsed}" />