One thing I like to do is get rid of direct View to Presenter communication. The reason for this is the view is at the UI level and the presenter is at the business layer. I don't like my layers to have inherent knowledge of each other, and I seek to limit the direct communication as much as possible. Typically, my model is the only thing that transcends layers. Thus the presenter manipulates the view through the interface, but the view doesn't take much direct action against the presenter. I like the Presenter to be able to listen to and manipulate my view based on reaction, but I also like to limit the knowledge my view has of its presenter.
I'd add some events to my IPersistenceStateView:
event EventHandler Save;
event EventHandler Open;
// etc.
Then have my Presenter listen to those events:
public PersistenceStatePresenter(IPersistenceStateView view)
{
_view = view;
_view.Save += (sender, e) => this.Save();
_view.Open += (sender, e) => this.Open();
// etc.
InitializeModel();
InitializeView();
}
Then change the view implementation to have the button clicks fire the events.
This makes the presenter act more like a puppetmaster, reacting to the view and pulling its strings; therein, removing the direct calls on the presenter's methods. You'll still have to instantiate the presenter in the view, but that's about the only direct work you'll do on it.