The hyphen is one of the "exceptions" (like full stop, comma...) where
\xspace does not set a space. You can eliminate it from the predetermined list of exceptions through
in the preamble.
Of course this might have other unwanted effects, for you mostly do not want a space before a hyphen. To correct this behaviour, I copy-paste from the
xspace documentation the following trick which ensures that an en- and em-dash have a space after them while a hyphen doesn't:
\gm is OK. % normal space
\gm-valued spinor works too. % no space, as it should.
\gm -- followed by en-sash % space
\gm --- Who was this guy? % space