none
Recargar la página RRS feed

  • Pregunta

  • Buenas,

    tengo en una de las páginas de mi aplicación un TextBox y un ListBox, el ListBox se ha de actualizar a medida que entro datos en el TextBox pero para conseguirlo he de recargar la página ya que no he podido hacerlo de otra forma.  También tengo problema para recargar la página sin salir de ella y volver a entrar.  Lo que he hecho es con navigate irme a una página que he creado y desde esta vuelvo a la que deseo recargar.  Os planteo esta duda porque, aunque así me funciona, no me parece nada elegante este procedimiento.

    ¿Tenéis alguna idea de como hacerlo de forma distinta?

    Muchas gracias.

    Editado: En realidad no me funciona ya que cuando le doy atrás se convierte en un bucle ya que una página dirige a la otra continuamente :(
    • Editado Estelarishh lunes, 21 de noviembre de 2011 12:42
    lunes, 21 de noviembre de 2011 12:26

Respuestas

  • Hola!

    ¿Que tipo de colección estás usando para rellenar el Listbox? Si usas un ObservableCollection<T> Te debería refrescar automáticamente cada vez que añadas un elemento a la colección.

    ¿Puedes poner el codigo que usas para añadir el nuevo item y el tipo de coleccion?

    Un saludo!


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    • Marcado como respuesta Estelarishh martes, 22 de noviembre de 2011 7:58
    lunes, 21 de noviembre de 2011 12:55
    Moderador

Todas las respuestas

  • Hola!

    ¿Que tipo de colección estás usando para rellenar el Listbox? Si usas un ObservableCollection<T> Te debería refrescar automáticamente cada vez que añadas un elemento a la colección.

    ¿Puedes poner el codigo que usas para añadir el nuevo item y el tipo de coleccion?

    Un saludo!


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    • Marcado como respuesta Estelarishh martes, 22 de noviembre de 2011 7:58
    lunes, 21 de noviembre de 2011 12:55
    Moderador
  • Hola Josue!

    estoy usando List<T>, lo he cambiado por ObservableCollection<T> pero me hace lo mismo.  El código es el siguiente:

            Lista lista = new Lista();
            IsolatedStorageSettings settings2 = IsolatedStorageSettings.ApplicationSettings;
    
            public ListaCompra()
            {
                InitializeComponent();
                inicializaSeleccionados2();
                listBox1.ItemsSource = seleccionados2;          
            }
            
            private void Guardar_Click(object sender, EventArgs e)
            {
                inicializaSeleccionados2();
                listBox1.ItemsSource = inicializaSeleccionados2();
                NavigationService.Navigate(new Uri("/Prueba.xaml?=", UriKind.Relative));  77Aquí es donde lo envío a la otra página
            }
          
    
            List<string> seleccionados2;
            public List<string> inicializaSeleccionados2()
            {
    
                if (settings2.Contains("lista2"))
                {
                    seleccionados2 = (List<string>)settings2["lista2"];
                }
                else
                {
                    seleccionados2 = new List<string>();
                }
                if (!seleccionados2.Contains(textBox1.Text))
                {
                    seleccionados2.Add(textBox1.Text);
                }
                settings2["lista2"] = seleccionados2;
                textBox1.Text = "";
    
                return seleccionados2;
    
            }
            
        }

    Muchas gracias.

     

    lunes, 21 de noviembre de 2011 14:23
  •  

    Solucionado!! 

    Se me había pasado implementar la interfaz INotifyPropertyChanged al usar el ObservableCollection<T>.

    Muchas gracias Josue.

    Editado:  Con el emulador me funciona correctamente pero cuando instalo la aplicación en el dispositivo y tiene que utilizar el método inicializaSeleccionados2(), me da un error de Casting tal y como podéis ver a continuación.

     

    System.InvalidCastException was unhandled

      Message=InvalidCastException

      StackTrace:

           at RecetasCoc.ListaCompra.inicializaSeleccionados2()

           at RecetasCoc.ListaCompra..ctor()

           at System.Reflection.RuntimeConstructorInfo.InternalInvoke(RuntimeConstructorInfo rtci, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)

           at System.Reflection.RuntimeConstructorInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)

           at System.Activator.InternalCreateInstance(Type type, Boolean nonPublic, StackCrawlMark& stackMark)

           at System.Activator.CreateInstance(Type type)

           at System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread(AsyncCallback userCallback, PageResourceContentLoaderAsyncResult result)

           at System.Windows.Navigation.PageResourceContentLoader.<>c__DisplayClass4.<BeginLoad>b__0(Object args)

           at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)

           at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)

           at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)

           at System.Delegate.DynamicInvokeOne(Object[] args)

           at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)

           at System.Delegate.DynamicInvoke(Object[] args)

           at System.Windows.Threading.DispatcherOperation.Invoke()

           at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)

           at System.Windows.Threading.Dispatcher.OnInvoke(Object context)

           at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)

           at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)

           at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

    El código que tengo ahora es:
    ObservableCollection<string> seleccionados2;
            public ObservableCollection<string> inicializaSeleccionados2()
            {
    
                if (settings2.Contains("lista2"))
                {
                    seleccionados2 = (ObservableCollection<string>)settings2["lista2"];
                }
                else
                {
                    seleccionados2 = new ObservableCollection<string>();
                }
                if (!seleccionados2.Contains(textBox1.Text))
                {
                    seleccionados2.Add(textBox1.Text);
                }
                settings2["lista2"] = seleccionados2;
                textBox1.Text = "";
    
                return seleccionados2;
    
            }

    Muchas gracias.

     


    • Editado Estelarishh martes, 22 de noviembre de 2011 8:10
    martes, 22 de noviembre de 2011 7:58