2012-05-25 21 views
5

He creado una aplicación básica de Metro para Win 8 usando Visual Studio 11 Ultimate en C#.Actualización de GUI de Windows 8 C# Metro App

El problema aquí es que quiero mostrar texto que cambia dinámicamente con ciertos eventos. Un ejemplo sería una aplicación en la que se muestra un número en la pantalla y se incrementa en 1 cada vez que se presiona el mouse.

He utilizado el enlace XAML a una estructura de datos que he creado que obtiene los valores que necesito mostrar, pero el problema es que a medida que cambian esos valores, los números que se muestran en la GUI no cambian.

¿Cómo puedo vincular mi XAML a datos que cambian dinámicamente para que la visualización XAML en la GUI también cambie?

¡Gracias por la ayuda!

- editar -

He implementado la interfaz INotifyPropertyChanged, pero ahora que estoy recibiendo una excepción a esta línea de código:

PropertyChanged (esto, nuevos PropertyChangedEventArgs (nombrePropiedad));

Aquí está la información Excepción:

La aplicación llamada una interfaz que se marshalled para un hilo diferente. (Excepción de HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

+1

Algunos ejemplos de código ayudaría como punto de partida aquí :-) –

+0

Parece que está tratando de cambiar un control fuera del hilo que lo maneja (basado en el código de error HRESULT). –

+0

¿Cómo maneja el "clic" del mouse? Evento en tu código? ¿Un ICommand en su modelo de vista? Dependiendo de dónde maneje el clic, que es también donde asumo que está configurando sus propiedades para mostrar, debe ordenar el evento PropertyChanged nuevamente a la secuencia de la interfaz de usuario. – Thelonias

Respuesta

7

Asegúrese de que su "estructura de datos" Eres unión a (correctamente) implementa INotifyPropertyChanged e invoca el evento PropertyChanged cuando se quiere notificar a la interfaz de usuario de un cambio.

Esta es la interfaz que permite a la capa xaml saber cuándo cambian los valores en los datos enlazados, y actualizar en consecuencia.


Editar en respuesta a la nueva información:

La aplicación llama una interfaz que se marshalled para un hilo diferente. (Excepción de HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

Esto sugiere que está elevando la propiedad ha cambiado de un hilo separado, lo que potencialmente causar problemas. Es posible que deba volver a ordenar esto en el hilo principal usando CoreDispatcher.RunAsync. Para detalles, vea this thread.

+0

El único problema es que CoreDispatcher.Invoke ya no es compatible. –

+0

@JoshuaMak Sí, siempre olvide que necesita cambiar a RunAsync - corregido. –

Cuestiones relacionadas