2012-05-25 10 views
5

Utworzyłem podstawowej aplikacji Metro dla Windows 8 przy użyciu programu Visual Studio 11 Ostatecznym w C#.Aktualizacja GUI Windows 8 Metro C# App

Problem polega na tym, że chcę, aby wyświetlić tekst, który dynamicznie zmienia się z określonych zdarzeń. Przykładem może być aplikacja, gdzie numer jest wyświetlany na ekranie i przyrostach o 1, gdy wskaźnik myszy zostanie kliknięty.

Używam powiązania XAML z utworzoną strukturą danych, która ma wartości, które muszę wyświetlić, ale problem polega na tym, że w miarę zmiany tych wartości liczby wyświetlane w interfejsie GUI się nie zmieniają.

Jak wiążę moją XAML do danych, które dynamicznie zmienia się tak, że wyświetlacz XAML na GUI zmienia, jak również?

Dzięki za pomoc!

- edycja -

I zostały wdrożone interfejsu INotifyPropertyChanged, ale teraz jestem odbierania wyjątek od tej linii kodu:

PropertyChanged (this, nowe PropertyChangedEventArgs (propertyName));

Oto informacje Wyjątek:

Aplikacja nazywa interfejs, który został skierowany na inny wątek. (Wyjątek od HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

+1

Oto przykładowy kod :-) –

+0

Wygląda na to, że próbujesz zmienić kontrolkę poza wątkiem, który ją obsługuje (na podstawie kodu błędu HRESULT). –

+0

Jak radzisz sobie z "klikaniem" myszy? Wydarzenie w twoim kodzie? ICommand na twoim modelu widoku? W zależności od miejsca, w którym obsługiwane jest kliknięcie, które jest również miejscem, w którym zakładam, że ustawiasz właściwości do wyświetlenia, musisz przekazać zdarzenie PropertyChanged do wątku interfejsu użytkownika. – Thelonias

Odpowiedz

7

Upewnij się, że „struktura danych” jesteś wiążące do (odpowiednio) realizuje INotifyPropertyChanged i wywołuje zdarzenie PropertyChanged, gdy chcesz powiadomić UI zmianie.

Jest to interfejs, który pozwala warstwę XAML wiedzieć, kiedy zmiany wartości w danych związanych i odpowiednio zaktualizować.


Edycja w odpowiedzi na nowe informacje:

Aplikacja nazywa interfejs, który został skierowany na inny wątek. (Wyjątek od HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

Sugeruje pan podniesienie właściwości zmieniono z osobnym wątku, który będzie potencjalnie powodować problemy. Być może trzeba będzie skierować to z powrotem do głównego wątku, używając CoreDispatcher.RunAsync. Aby uzyskać szczegółowe informacje, patrz this thread.

+0

Jedynym problemem jest to, że CoreDispatcher.Invoke nie jest już obsługiwany. –

+0

@JoshuaMak Tak - zawsze zapomnieć, że musi przejść do RunAsync - naprawiono. –

Powiązane problemy