2012-05-25 3 views
5

Я создал базовое приложение Metro для Win 8 с использованием Visual Studio 11 Ultimate в C#.Обновление GUI для Windows 8 C# Metro App

Проблема в том, что я хочу отображать текст, который динамически изменяется с определенными событиями. Примером может служить приложение, в котором число отображается на экране и увеличивается на 1 при каждом щелчке мыши.

У меня есть привязка XAML к структуре данных, которую я создал, которая получает значения, которые мне нужно отображать, но проблема в том, что при изменении этих значений числа, отображаемые в графическом интерфейсе, не изменяются.

Как связать свой XAML с динамически изменяемыми данными, чтобы изменения XAML в графическом интерфейсе также изменились?

Спасибо за помощь!

- редактировать -

Я реализовал интерфейс INotifyPropertyChanged, но теперь я получаю исключение из этой строки кода:

PropertyChanged (это, новые PropertyChangedEventArgs (ИмениСвойства));

Вот информация Исключение:

приложение под названием интерфейс, который выстроил для другого потока. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

+1

Некоторые примеры кода помогут в качестве отправной точки здесь :-) –

+0

Похоже, вы пытаетесь изменить элемент управления за пределами потока, который его обрабатывает (на основе кода ошибки HRESULT). –

+0

Как вы управляете «щелчком» мыши? Событие в вашем коде? ICommand на вашем viewmodel? В зависимости от того, где вы работаете с кликом, в котором я также предполагаю, что вы настраиваете свои свойства для отображения, вы должны перенести событие PropertyChanged обратно в поток пользовательского интерфейса. – Thelonias

ответ

7

Убедитесь, что «структура данных» вы связываете с (правильно) реализует INotifyPropertyChanged и вызывает событие PropertyChanged, когда вы хотите, чтобы уведомить пользовательский интерфейс изменения.

Это интерфейс, который позволяет уровню xaml знать, когда значения изменяются в связанных данных, и соответственно обновлять их.


Редактировать в ответ на новую информацию:

приложение под названием интерфейс, который выстроил для другого потока. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

Это говорит о том что вы повышение свойства изменились по сравнению с отдельной нити, которые потенциально будут вызывать проблемы. Возможно, вам понадобится маршалировать это обратно в основной поток, используя CoreDispatcher.RunAsync. Для получения дополнительной информации см. this thread.

+0

Проблема только в том, что CoreDispatcher.Invoke больше не поддерживается. –

+0

@JoshuaMak Да, всегда забывайте, что нужно переключиться на RunAsync - исправлено. –

Смежные вопросы