@award: I ran this by some folks who know async-await better than me and here is what they said. The problem with the code as I have it is that the lambda passed to the RelayCommand ignores the returned Task. This is fine when the call succeeds but any exceptions thrown by Save or Delete are ignored.
So they recommend making the lambda async and awaiting the task as follows:
SaveCustomer = new RelayCommand(async() => await Save());
They also recommend calling the method SaveAsync rather than Save.