WPF Tips

Code the UI as a data structure first, then bind to itBefore you write XAML, start creating classes that represent the entities and values you want in the UI. Make them implement INotifyPropertyChanged and put all of the reflexive logic in these (such as enforcing options based on selections in other parts of the UI). Write unit tests for this behavior. Now you can start {Binding} these structures to XAML

Consider starting with a Session classDon't make your UI-bound data structures belong to Window1, make them belong to a new class called Session and bind that to the first <Grid> control's DataContext. Now it'll be easier to migrate the UI into another program, support multiple sessions, or save the whole UI state by serializing instances of Session to disk

Don't manipulate the controls, manipulate the bound dataIf you can, avoid turning to hacks to discover the offset of a ListView or relying on the index position of a combo-box. And instead of doing "UserChoice = this.MyCombobox.SelectedItem" try doing "<ComboBox SelectedItem="{Binding Path=UserChoice}"..."