New Zealand has had to settle for second at the debut Sail GP event, just up the road at Lyttelton Harbour.
But New Zealander Phil Robertson was at the helm of winner Canada, edging out New Zealand and Peter Burling to secure Canada's first event win.
In one of the closest final battles of the season, the Canadians went head-to-head with Burling, with close crosses and lead changes throughout.
New Zealand, Canada and Australia all made good starts in the final, but it was Canada that got to Mark One first with the all-important inside track.
Despite falling off the foils and even picking up a boundary penalty, the Canadians were consistently faster than New Zealand and Australia.
It marks the first win for the young team, which previously lost out in the finals of Bermuda and Chicago earlier in the season.
Robertson said he was pleased to finally lodge an event win and "stoked to win at home".
"We gave it a good shot of letting the Kiwis back into it, but we managed to scrub the penalty and come fast into the bottom, so happy days!"
"I've got my parents, wife and brothers here and it's a first win for Canada - we're trying to be competitive with the top teams so today is just an example of what we can do," said Robertson.
The win came only after Canada squeezed into the top three final showdown by narrowly beating Emirates Great Britain SailGP Team in the final moments of the fifth fleet race.
Despite picking up two race wins on the second day of racing in Christchurch, Tom Slingsby's Australia never posed a serious threat as the final unfolded.
However, the event results mean Australia remain comfortable at the top of the overall leaderboard with 84 points, while New Zealand, in second place with 73, has slightly closed the gap.
France remains in third despite finishing fifth in Christchurch, but has a slim one-point lead ahead of Emirates Team GBR in fourth.
The nine-strong F50 fleet will compete in the Season 3 Grand Final in San Francisco in early May, where the season champion will be decided.