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}" />