Foros del Web » Programación para mayores de 30 ;) » .NET »

WPF(Con experiencia):Desde una UI,volver a la anterior pero devolviendo un parámetro.

Estas en el tema de WPF(Con experiencia):Desde una UI,volver a la anterior pero devolviendo un parámetro. en el foro de .NET en Foros del Web. Hola foreros !!! A ver si alguien puede ayudarme con este pequeño dilema de WPF. Mi aplicación es una ventana donde solo puede haber una ...
  #1 (permalink)  
Antiguo 26/09/2014, 04:32
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
WPF(Con experiencia):Desde una UI,volver a la anterior pero devolviendo un parámetro.

Hola foreros !!!

A ver si alguien puede ayudarme con este pequeño dilema de WPF.

Mi aplicación es una ventana donde solo puede haber una View.

Desde una View, puedes navegar a otra View, y luego volver a la anterior, o navegar a otra más, etc...

Estas Views las voy metiendo en una pila, cuando navegas a una, la inserto en la pila y la muestro. Cuando sales de la View, la saco de la pila, y te muestro la que había antes.

Por ejemplo.. Estoy en la View "Listado de Clientes", y tiene un botón "Insertar Cliente". Al pulsar el botón, voy a la View "Insertar Cliente", ocultándose la View "Listado Clientes".

Al guardar el cliente, cierro la View "Insertar Cliente", y se vuelve a mostrar la que había justo detrás de esa, que es "Listado de Clientes".

Para hacer esto tengo lo siguiente:

- Tengo una clase estática WindowManager, que contiene la Lista de UserControls que se van mostrando. Y con dos métodos: ExecuteUI(UserControl control) que inserta un elemento, y FinalizeUI(), que elimina el primer elemento de la lista.

Código Java:
Ver original
  1. public static class WindowManagerUI
  2.     {
  3.  
  4.  
  5.         #region ListViews
  6.  
  7.         private static object _listViewsLock = new object();
  8.  
  9.         private static ObservableCollection<UserControl> _listViews;        
  10.         public static ObservableCollection<UserControl> ListViews
  11.         {
  12.             get
  13.             {
  14.  
  15.                 if (_listViews == null)
  16.                 {
  17.  
  18.                     _listViews = new ObservableCollection<UserControl>();
  19.  
  20.                     BindingOperations.EnableCollectionSynchronization(_listViews, _listViewsLock);
  21.                 }
  22.  
  23.                 return _listViews;
  24.             }
  25.         }
  26.  
  27.         public static event ExecuteEvent OnExecute;
  28.         #endregion
  29.  
  30.  
  31.         public static void ExecuteUI(UserControl control)
  32.         {
  33.  
  34.             ListViews.Insert(0, control);
  35.  
  36.             if (OnExecute != null)
  37.                 OnExecute(new ExecuteEventArgs(control, EActionExecute.Load));
  38.         }
  39.  
  40.         public static void FinalizeUI()
  41.         {
  42.  
  43.             ListViews.RemoveAt(0);
  44.  
  45.             if (OnExecute != null)
  46.                 OnExecute(new ExecuteEventArgs(null, EActionExecute.UnLoad));
  47.         }
  48.     }



- Tengo una clase ViewModelBase, que tiene una propiedad CurrentUI, que devuelve el ultimo UserControl insertado en WindowManager, y un Evento, que cada vez que la lista de WindowManager es alterada, refresca la propiedad CurrentUI.

Código Java:
Ver original
  1. public class ViewModelBase : PropertyChangedBase
  2.     {
  3.  
  4.         #region PROPERTIES
  5.  
  6.         public UserControl CurrentUI
  7.         {
  8.  
  9.             get
  10.             {
  11.                
  12.                 return WindowManagerUI.ListViews.Count.Equals(0) ? null : WindowManagerUI.ListViews[0];
  13.             }
  14.         }
  15.        
  16.         #endregion
  17.  
  18.  
  19.         #region METHODS
  20.  
  21.         protected void ExecuteUI(UserControl control)
  22.         {
  23.  
  24.             WindowManagerUI.ExecuteUI(control);
  25.         }
  26.  
  27.         protected void FinalizeUI()
  28.         {
  29.  
  30.             WindowManagerUI.FinalizeUI();
  31.         }
  32.  
  33.         #endregion
  34.  
  35.  
  36.         #region EVENTS
  37.  
  38.         private void WindowManagerUI_OnExecute(ExecuteEventArgs e)
  39.         {
  40.  
  41.             NotifyOfPropertyChange(() => this.CurrentUI);
  42.         }
  43.         #endregion
  44.  
  45.  
  46.         public ViewModelBase()
  47.         {
  48.  
  49.             WindowManagerUI.OnExecute += WindowManagerUI_OnExecute;
  50.         }
  51.     }

Bien... esto funcionar funciona perfectamente. Desde cualquier ViewModel, navego al UserControl que me de la gana, me lo muestra, y cuando lo finalizo, me muestra el anterior.

Código Java:
Ver original
  1. //Desde un ViewModel, por ejemplo, al pulsar un botón:
  2. this.ExecuteUI(new LoginUI());
  3.  
  4.  
  5. //En el ViewModel del LoginUI, finalizo dicho UserControl, y se me mostrará el anterior.
  6. //this.Finalize();


Pero.. no es la filosofía que me gustaría, ya que así no soy capaz de recibir un Resultado de las vistas.

Buscaría algo como:
Código Java:
Ver original
  1. CustomResult result = this.ExecuteUI(new LoginUI());

En fin... mi intención es hacer algo para que cada vez que ejecute un UserControl, poder devolver un objeto. Que será desde Null, hasta lo que sea... Luego ya me organizaré para devolver una clase específica.

Pero la idea es... conseguir que un UserControl devuelva un resultado.

¿Alguien con experiencia en WPF me puede orientar, para hacerlo de la forma correcta?

Gracias.
__________________
Charlie.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:03.