Причиной того, что вы видите, являются встроенные шаблонные правила . У вас есть только соответствующий шаблон Prov
. Это оставляет всю ветку Doc
вашего входного XML для обработки этими встроенными шаблонами, которые копируют все текстовые узлы в вывод.
Чтобы предотвратить это, вы можете добавить:
к вашей таблице стилей или - если хотите - сократить все это до:
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?
Сохраните ссылку на свой ObservableCollection
и время последнего изменения XML-файла на момент его загрузки. Всякий раз, когда окно фокусируется, проверьте метку времени на файле диска. Если это изменилось, очистите и повторно заполните ObservableCollection
. Графический интерфейс автоматически прослушивает события изменения из ObservableCollection
и будет автоматически заполняться при изменении содержимого коллекции.
ObservableCollection
. Графический интерфейс автоматически прослушивает события изменения из ObservableCollection
и будет автоматически заполняться при изменении содержимого коллекции. время последнего изменения с момента загрузки. Всякий раз, когда окно фокусируется, проверьте метку времени на файле диска. Если это изменилось, очистите и повторно заполните ObservableCollection
. Графический интерфейс автоматически прослушивает события изменения из ObservableCollection
и будет автоматически заполняться при изменении содержимого коллекции.