2009-07-18 3 views
1

У меня есть приложение Silverlight 3, которое вызывает традиционную веб-службу .NET (asmx), чтобы получить список записей, а затем отобразить их в элементе управления ListBox (lstRecords.ItemsSource = myRecords). Любые записи могут быть добавлены или обновлены или удалены в любое время, и я бы хотел, чтобы мой пользовательский интерфейс (записи, отображаемые в элементе управления ListBox) отражал последние изменения.Как обновить ItemsSource с помощью Silverlight 3?

Прямо сейчас у меня есть System.Threading.Timer, который каждые 5 секунд вызывает WebService и обновляет lstRecords.ItemsSource. Это вид работает, но он не делает именно то, что я хочу. Например, если выбрана строка и обновлен ItemSource, я теряю выделение.

Мне было интересно, есть ли в Silverlight 3 механизм для работы с такой штукой. У вас есть лучшее предложение о том, как я могу это сделать?

Спасибо!

ответ

2

Мои предложения - следовать шаблону Model-View-ViewModel. Вы должны разделить свой веб-сервис как модель и ваш XAML как вид, ViewModel должен быть слоем между ними. Попросите свой вид (XAML) привязаться к ObservableCollection в вашей модели ViewModel, и ваш ViewModel вызовет WebService напрямую, а затем слейте результат с помощью ObservableCollection. Если вы перепроверяете свою коллекцию каждый раз, когда вы потеряете состояние привязки своего списка.

Вот некоторые ссылки для MVVM -

0

Если вы использовали диалоговое окно Add Service Reference в visual studio, ваша коллекция предположительно является ObservableCollection. Возможно, вам захочется взглянуть на объединение новых элементов в эту коллекцию в фоновом потоке вручную. например, вызвать веб-сервис, а затем добавить/удалить/обновить элементы в исходном списке для синхронизации списков. Не перепроверьте весь список.

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