Como ya había comentado las vistas deberán actualizarse cuando su estado cambie dependiendo de las acciones que lleve a acabo el usuario, es decir, los controles deberán activarse, desactivarse, etc… cada vez que el estado de la vista cambie.
Finalmente, y tras descartar el uso de los triggers que por lo que he visto no valdrían ( aunque igual estoy equivocado, mis conocimientos de WPF son limitados
), he decidido implementarlo con una solución similar a la explicada por Jeremy D. Miller en su serie de como construir tú propio CAB, la implementación es diferente pero la idea es la misma.
La diferencia está en que en mi caso el cambio de estado lo que hará será ejecutar una serie de tareas en el mismo orden en el que se han añadido en el ControlState asociado a un estado determinado.
Las vistas tendrán 2 métodos uno para configurar los estados y otro para actualizar el estado cuando este cambie.
1: public DivisasViewModel ViewModel
2: {
3: set
4: {
5: this.viewModel = value;
6: this.DataContext = value;
7:
8: this.viewModel.ViewModelStateChanged += delegate
9: {
10: this.UpdateState();
11: };
12:
13: this.UpdateState();
14: }
15: }
1: protected override void OnInitialized(EventArgs e)
2: {
3: base.OnInitialized(e);
4: this.ConfigureStateMachine();
5: }
6:
7: protected void UpdateState()
8: {
9: this.viewStateMachine.SetState(this.viewModel.ViewModelState.ToString());
10: }
1: private void ConfigureStateMachine()
2: {
3: this.viewStateMachine = new ViewStateMachine<string>();
4:
5: this.viewStateMachine.OnStateChangeTo(ViewModelStateType.Busy.ToString())
6: .Disable(this.VisualRoot, typeof(Control), typeof(TabControl))
7: .Disable(this.DataGridCambios, this.DataGridArqueos);
8:
9: this.viewStateMachine.OnStateChangeTo(ViewModelStateType.Default.ToString())
10: .Disable(this.VisualRoot, typeof(Control), typeof(TabControl))
11: .Disable(this.DataGridCambios, this.DataGridArqueos)
12: .Enable(this.txtDivisa)
13: .Enable(this.Searcher)
14: .SetFocus(this.txtDivisa);
15:
16: this.viewStateMachine.OnStateChangeTo(ViewModelStateType.AddingNew.ToString())
17: .Enable(this.VisualRoot, typeof(Control))
18: .Enable(this.DataGridCambios, this.DataGridArqueos)
19: .SetFocus(this.txtDivisa);
20:
21: this.viewStateMachine.OnStateChangeTo(ViewModelStateType.Editing.ToString())
22: .Enable(this.VisualRoot, typeof(Control))
23: .Enable(this.DataGridCambios, this.DataGridArqueos)
24: .Disable(this.txtDivisa)
25: .SetFocus(this.txtRedondeo);
26: }
0 Respuestas a “Estado de las vistas (y II)”