The code in this application is poorly designed, confusing, and error prone. Refactor the objects below to follow a more SOLID design.
Keep in mind the fundamentals of MVVM/MVC and Single-responsibility/Separation of Concerns when refactoring. This application has a lot of code that is in places it shouldn't be. This is done intentionally. If it smells, feel free to make it not smell.
Feel free to add as many additional files as you see fit.
Unit testing is not required.
Note: The goal here is not 100% correctness, but instead a glimpse into how you approach refactoring/redesigning bad code. Commit often.