Seattle took the lead in the fifth minute when Clint Dempsey set up Barrett to score his first goal of the season.
Kekuta Manneh, who was looking lively in the Vancouver attack, failed to hit the target with two attempts.
The Whitecaps continued to push for an equaliser, but Morales saw his shot saved and Octavio Rivero's long-range effort was blocked in the 35th minute.
Barrett made Vancouver pay once again, nestling the ball into the back of the net from Marco Pappa's cross to double Seattle's lead before half time.
Vancouver were made to regret their profligacy in front of goal, with Rivero and Manneh once again seeing their shots kept out.
Barrett was replaced by midfielder Andy Rose with 18 minutes remaining as Seattle looked to quell the threat provided by the Vancouver attack.
Pappa was twice denied by David Ousted in the closing stages, and Rivero's shot was saved at the other end as Seattle picked up the three points.