phone celulares caracteristicas windows-phone-7

windows phone 7 - celulares - Pasar datos de una página a otra



windows phone 7.8 whatsapp (8)

Hay un par de cosas en juego aquí. En primer lugar, si / cuando el usuario usa el botón Atrás para regresar a la página A en lugar de a su botón, ¿se intercambia o no la información en los cuadros de texto (está Atrás = Cancelar, o está Atrás = OK?)

Dicho esto, si está utilizando NavigationService.GoBack (que debería ser en lugar de NavigationService.Navigate, porque si usa la llamada Navigate, los hits repetidos de la clave back causará todo tipo de UX incorrecto para sus usuarios), entonces QueryStrings no son una opción. Debido a que las páginas realmente no tienen forma de referencia en el sistema de navegación WP7 Silverlight, debe utilizar un tercero para almacenar sus datos. Para eso, puede activar (a) Almacenamiento aislado (lento y pesado, pero a prueba de errores), (b) Usar el diccionario PhoneApplicationService.State, o (c) usar propiedades globales de algún tipo, colgadas de la aplicación objeto, o usando Estática / Singletons ...

Recuerde que debe observar el comportamiento de Tombstoning cuando hace esto: su página procesará el método OnNavigatedTo cuando (a) navegue en su aplicación (b) regrese a ella cuando complete su trabajo en la Página B, o (c) destruyes tu aplicación desde esa página y regresas a tu aplicación usando la tecla Atrás.

Lamento no haber dado una respuesta más directa allí, mucho depende de sus circunstancias específicas. En el caso más general, consideraría utilizar el Diccionario de estado de la aplicación en PhoneApplicationService ... es liviano, fácil de usar y sobrevive. Solo asegúrese de que sus llaves sean tan únicas como deben ser.

Estoy buscando la mejor práctica sobre cómo pasar datos de una página a otra.

En la página AI tengo un botón que dispara fuera de la página B.
En la Página BI tienen 6 cuadros de texto que permiten al usuario ingresar información. Cuando el usuario finaliza, haga clic en un botón que los devuelve a la Página A.

Quiero pasar esa información a la Página A.

He visto sugerencias para:

  • crear documentos XML y guardar en almacenamiento aislado
  • usa la clase App para almacenar información en propiedades
  • pasarlo como una cadena de consulta

Estoy buscando la mejor práctica. ¿Hay uno que Microsoft recomienda o uno que generalmente se acepta como la mejor manera?

Gracias


Personalmente almacenaba los valores ingresados ​​en la Página B en un modelo (objeto) que también es accesible a la Página A.

Dependiendo de cómo navegue a la Página A por segunda vez, una o más de las siguientes opciones pueden ser útiles para ayudar a entender los valores que pasan entre las páginas:

¿Cómo pasar el valor de la imagen en una página xaml a otra página xaml en Windows Phone 7?

Pasar un objeto complejo a una página mientras navegas en una aplicación WP7 Silverlight

¿Cómo pasar un objeto de una página xaml a otra?

¿Cómo pasar un valor entre las páginas de Silverlight para WP7?

¿Cómo navego desde una página xaml a otra y paso valores?


Si crea un nuevo proyecto de Windows Phone y utiliza la plantilla de datos de Windows Phone , tendrá la mayor parte del trabajo hecho para usted.

Lo que querrá hacer es configurar ViewModel para que contenga todos los datos de su aplicación. Puede serializar y deserializar estos datos utilizando IsolatedStorage para que se guarden en las sesiones de aplicaciones y en Tombstoning.

En la plantilla, notará MailViewModel y ItemViewModel . MainViewModel almacena todos los datos que su aplicación necesita, incluida una ObservableCollection de ItemViewModel, y ItemViewModel representa el tipo de datos individual para su aplicación.

En la página DetailsPage.xaml, querrá enlazar DataBind con cada cuadro de texto en los elementos App.MainViewModel. Establezca el enlace en TwoWay si desea que el ViewModel se actualice tan pronto como el usuario manipule los datos en DetailsPage.xaml. Opcionalmente, puede establecer la vinculación en OneWay y luego tener un botón Aceptar que vuelve a escribir los cambios en ViewModel y los guarda en IsolatedStorage.

Aquí hay un ejemplo de cómo se ve un enlace:

<TextBlock x:Name="ListTitle" Text="{Binding LineOne}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>

En este caso, LineOne es una propiedad en ItemViewModel y la página obtiene esta información de la cadena de consulta cuando el usuario selecciona un elemento de MainPage.xaml. El DataContext para la página determina de dónde proviene la información de datos.

Aquí está el fragmento donde la página principal pasa el elemento seleccionado del ViewModel a la página de detalles.

// Handle selection changed on ListBox private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { // If selected index is -1 (no selection) do nothing if (MainListBox.SelectedIndex == -1) return; // Navigate to the new page NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + MainListBox.SelectedIndex, UriKind.Relative)); // Reset selected index to -1 (no selection) MainListBox.SelectedIndex = -1; }

Aquí es cómo la página de detalles obtiene el elemento seleccionado.

protected override void OnNavigatedTo(NavigationEventArgs e) { string selectedIndex = ""; if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex)) { int index = int.Parse(selectedIndex); DataContext = App.ViewModel.Items[index]; } }

Juega con la plantilla predeterminada de arriba y formula cualquier pregunta adicional.

La belleza de la vinculación de datos y ObservableCollection es que puede actualizar los datos y UX reflejará esos cambios de inmediato. Esto se debe a que cualquier cambio en los datos desencadena un evento:

public string LineOne { get { return _lineOne; } set { if (value != _lineOne) { _lineOne = value; NotifyPropertyChanged("LineOne"); } } }

NotifyPropertyChanged () que difunde esta información a la Vista.


También puede mantenerlo simple y usar PhoneApplicationService.Current.State, que es básicamente una tabla hash. Deberá implementar su propia clasificación hacia y desde el almacenamiento aislado si desea que algo sobreviva a la aplicación.

La sugerencia de Omar de utilizar la plantilla de Windows Phone Databound es probablemente la mejor idea en esta página. Es lo mismo que mi sugerencia, pero obtendrá un mejor resultado (más código de mantenimiento) a costa de una curva de aprendizaje más empinada.

Sugiero que lo hagas a mi manera y luego lo vuelvas a hacer a la manera de Omar.


Una cosa que puede considerar es usar MVC: deje que su aplicación sea el controlador, almacene todos los datos en el modelo y las páginas solo sean vistas que contengan una lógica de UI pura. En este caso, sus páginas son pintores y pasa su objeto modelo. Esto proporciona un buen aislamiento de la lógica de negocios y la interfaz de usuario para que pueda agilizarlos fácilmente.

Por cierto, Silverlight y XAML son excelentes herramientas para MVC, por lo que es una coincidencia natural.


Una opción es usar Application.Resources:

Almacenamiento de datos:

Application.Current.Resources.Add("NavigationParam", customers); NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.Relative));

Recuperar datos:

var customers = (List<Customer>) Application.Current.Resources["NavigationParam"];

Aquí hay una publicación de blog que describe esto con más detalle: http://mikaelkoskinen.net/windows-phone-pass-data-between-pages-application-resources/ (author: me)


como lo implementé así ... Si es correcto o no, no lo sé ...

Cuando haces clic en la página de la lista de noticias, debe abrir la página de detalles de noticias. Quiero pasar el contenido de las noticias seleccionadas de la página de lista de noticias a la página de detalles de noticias.

la página de la lista de Noticias contiene el siguiente método.

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { NewsDetailsPage newsDetailPage = (e.Content as NewsDetailsPage); if (newsDetailPage != null) newsDetailPage.SelectedNewsItem = SelectedNewsItem; //Contains the news details base.OnNavigatedFrom(e); }

En la página de detalles de noticias. U puede acceder a ese objeto (SelectedNewsItem).

Esto puede o no ser correcto.


PhoneApplicationService.Current.State["yourparam"] = param NavigationService.Navigate(new Uri("/view/Page.xaml", UriKind.Relative));

luego en otra página simplemente

var k = PhoneApplicationService.Current.State["yourparam"];