I want to add a separate Answer for the follow-up Question about the State Machines.
Just for illustration of a State Machine approach, please see my Article
Enumeration Types do not Enumerate! Working around .NET and Language Limitations[
^], section 3.6 "Cartesian Square".
A State Machine is a formal model which can be used for analysis, but in some cases it is very beneficial to create more or less universal model of a Finite State Machine (FSM) as a functional object in the application system. In essence, you have a set
S
of elements each representing a State. A subset of a Cartesian Square of the set shows what set is connected to what. This is a definition of mathematical Relationship and can also server as one of the representations of arbitrary finite graph. To represent a FSM, the graph should be directed, which is always a case when it comes to implementation of the Cartesian Square in code. In this way, each element of the Square says: "this state can go to that state". The automation of the calculation on the FSM can be done by representing the element not with Boolean values, but with some data items use to carry important information on how to make a transition (for example, for driving real robotic hardware), it can be even a delegate instance. If a transition is not allowed, the element of the Cartesian Square could be use to carry information on why not (error message or a format for error string).
In this way, we have an abstract approach to very different behavior universally described by a model of FSM. It does not have anything to do with Views and Presentation (WPF or not), thus FSM approaches can be freely combined with MVVM or other architectural patterns actually focusing on separation of functionality and UI.
—SA