Как заставить ItemsSource обновлять связываем?

Причиной того, что вы видите, являются встроенные шаблонные правила . У вас есть только соответствующий шаблон Prov. Это оставляет всю ветку Doc вашего входного XML для обработки этими встроенными шаблонами, которые копируют все текстовые узлы в вывод.

Чтобы предотвратить это, вы можете добавить:


    

к вашей таблице стилей или - если хотите - сократить все это до:





    



11
задан Edward Tanguay 30 April 2009 в 12:44
поделиться

2 ответа

ItemsControl запрашивает свою привязку один раз и затем кэширует ссылку.

Если содержимое объекта коллекции изменено, и он реализует INotifyCollectionChanged (как ObservableCollection ] делает), он подберет любой добавленный или удаленный объект.

Теперь, если вы хотите, чтобы привязка предоставила новый объект коллекции в ListBox , вы можете использовать свою модель представления INotifyPropertyChanged и поднять PropertyChanged ,передавая GetAll в качестве имени свойства. This will have the effect of warning the binding that the property value has changed (there is a new ObservableCollection ready to be picked up), which it will supply to the ListBox, which will re-generate its items.

So as long as you effect changes from your app, working on the ObservableCollection returned by GetAll, you can add and remove and the list will stay in synch. When you want to pick up external modifications (you might have a refresh button somewhere, or a natural point where it makes sense to reload the whole file), you can have your view-model raise the PropertyChanged event, which will automatically call the property getter, which will call the static method, which will return a fresh new collection.

Nitpicker note: why do you give method names to properties?

13
ответ дан 3 December 2019 в 05:59
поделиться

Сохраните ссылку на свой ObservableCollection и время последнего изменения XML-файла на момент его загрузки. Всякий раз, когда окно фокусируется, проверьте метку времени на файле диска. Если это изменилось, очистите и повторно заполните ObservableCollection . Графический интерфейс автоматически прослушивает события изменения из ObservableCollection и будет автоматически заполняться при изменении содержимого коллекции.

время последнего изменения с момента загрузки. Всякий раз, когда окно фокусируется, проверьте метку времени на файле диска. Если это изменилось, очистите и повторно заполните ObservableCollection . Графический интерфейс автоматически прослушивает события изменения из ObservableCollection и будет автоматически заполняться при изменении содержимого коллекции.

время последнего изменения с момента загрузки. Всякий раз, когда окно фокусируется, проверьте метку времени на файле диска. Если это изменилось, очистите и повторно заполните ObservableCollection . Графический интерфейс автоматически прослушивает события изменения из ObservableCollection и будет автоматически заполняться при изменении содержимого коллекции.

0
ответ дан 3 December 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: