I would ask why you need to reorganize this? if the answer is “So its standards are compatible,” “It looks better,” or “So our development team is happy,” then I would seriously review it.
If the answer is “Because we cannot satisfy the needs of the business because of the complexity of changing / updating our application”, then you have a valid business reason.
I worked on many projects in which my first instinct was to write and rewrite it. Many of those whom I actually actually collected and rewritten, only to find out halfway that the original developers, while they did not do this, like I (or even had bad coding standards), fixed many problems that I would never have been seen!
In the same way, I worked on one or two, where the rewriting or deep refactor had a strong business reason, and the result was successful. However, it is always painful for him to make these changes.
So. In conclusion, if I had to do this because of a strong business need, I would probably start by creating a script test (manual testing) or, better yet, automatic tests (UI or UNIT tests, it doesn’t matter) that roughly check the functionality of your application.
Then I would take Views in turn and create ViewModels for them, moving the functionality to ViewModels. For example, moving dependency and INotifyPropertyChanged properties to a virtual machine.
Then I look at Injection Dependency, for example. StructureMap for binding the dependencies required in these view modes, or some other method to keep the connection low.
These methods and others are described in Brownfield Application Development in .NET .
Finally, I would look back at my beautiful code, which does half the functions that the old application performed. Joke! It’s good that this last part was grandiose, I think there are many reasons why this is a very good thing (refactoring), but I learned from bitter experience not to take these decisions lightly.
Yours faithfully!