Как обновить пользовательский интерфейс в приложении метро?

Я использую этот код на странице XAML:

<TextBox ItemsSource="{Binding Posters, Converter={StaticResource collectionToFirstElementConverter}, Mode=TwoWay}" />

Плакаты - это ObsevableCollection, и я использую конвертер, который берет коллекцию и получает ее первый элемент.

Поскольку я использую асинхронные процедуры, когда текстовое поле получает объект, в нем нет элементов (Count=0), и вызывается конвертер.

Я пытаюсь обновить текстовое поле каждый раз, когда свойство добавляет новые элементы, но не вызывает конвертер.

Я помню, что в Silverlight или WPF существует SourceTrigger или UpdatePropertyChanged, но в WinRT я не вижу этого режима.


person Darf Zon    schedule 20.06.2012    source источник
comment
Почему бы просто не указать свойство для первого элемента вашего контекста данных?   -  person myermian    schedule 20.06.2012
comment
Проблема в том, что я использую асинхронный режим... поэтому, когда текстовое поле пытается загрузить это свойство, оно получает значение null! Поэтому мне нужен способ получить элемент, сообщающий пользовательскому интерфейсу об обновлении свойства.   -  person Darf Zon    schedule 20.06.2012
comment
Почему бы просто не запустить событие OnChanged (думаю, это название события) после завершения асинхронных операций?   -  person ReinstateMonica Larry Osterman    schedule 20.06.2012
comment
Нет, я не нахожу это событие. На самом деле мне нужен какой-то способ обновить или обновить пользовательский интерфейс с момента кода.   -  person Darf Zon    schedule 20.06.2012


Ответы (1)


Самый простой способ добиться этого — соответствующим образом изменить модель представления, содержащую свойство Posters. Я вижу два способа сделать это (оба предполагают, что ваша модель представления реализует INotifyPropertyChanged):

  • Добавьте обработчик событий в Posters.CollectionChanged и внутри него поднимите INotifyPropertyChanged.PropertyChanged для Posters.
  • Добавьте еще одно свойство FirstPoster, возвращающее значение первого элемента в Posters. В модели представления добавьте обработчик событий для Posters.CollectionChanged и внутри него поднимите INotifyPropertyChanged.PropertyChanged для FirstPoster. Таким образом, вам даже не нужен преобразователь.

Лично мне больше нравится второй подход.

person Damir Arh    schedule 20.06.2012