I'm no expert in formatting TimeSpan
so I can't tell you exactly why they produce the same result but you can read up about it here: Custom TimeSpan Format Strings
Of course each one do not work on the other.
They do work the same way, the thing is just that you should use one backslash within the double quotes. The following
<Binding Path="MinTime"
StringFormat="hh\\:mm\\:ss"
TargetNullValue=" --- "/>
comes out to hh\\\\:mm\\\\:ss
. So instead you should write
<Binding Path="MinTime"
StringFormat="hh\:mm\:ss"
TargetNullValue=" --- "/>
The following two Bindings
should produce the same result
<DataGridTextColumn Header="Max Time" IsReadOnly="True"
Binding="{Binding Path=MaxTime,
StringFormat=hh\\:mm\\:ss,
TargetNullValue=' --- '}"/>
<DataGridTextColumn Header="Min Time" IsReadOnly="True">
<DataGridTextColumn.Binding>
<Binding Path="MinTime"
StringFormat="hh\:mm\:ss"
TargetNullValue=" --- "/>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
And so should the following two
<DataGridTextColumn Header="Max Time" IsReadOnly="True"
Binding="{Binding Path=MaxTime,
StringFormat={}{0:hh':'mm':'ss},
TargetNullValue=' --- '}"/>
<DataGridTextColumn Header="Min Time" IsReadOnly="True">
<DataGridTextColumn.Binding>
<Binding Path="MinTime"
StringFormat="{}{0:hh':'mm':'ss}"
TargetNullValue=" --- "/>
</DataGridTextColumn.Binding>
</DataGridTextColumn>