2012-06-20 5 views
0

Я использую этот код на странице XAML:Как обновить пользовательский интерфейс в приложении метро?

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

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

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

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

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

+1

Почему бы просто не открыть объект для первого элемента в вашем файле данных? –

+0

Проблема в том, что я использую async .. поэтому, когда текстовое поле пытается загрузить это свойство, оно получает значение null! Итак, мне нужен способ, чтобы элемент указывал пользовательскому интерфейсу обновить свойство –

+0

Почему бы просто не запустить событие OnChanged (я думаю, это имя события), когда операции async завершены? –

ответ

2

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

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

Мне лично нравится второй подход лучше.

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