Возможная проблема и решение # 1
Есть ли у вас этот ресурс XmlDataProvider, также объявленный в блоке Application.Resources?
Если вы это сделаете,элемент ListBox пользовательского интерфейса XAML «thumbnailList» относится к экземпляру панели «Сетка» XmlDataProvider.Я предполагаю, что поскольку я не вижу кода в конструкторе файлов Window CS, вы обращаетесь к экземпляру уровня приложения XmlDataProvider при обращении к нему XmlDataProvider, как в
XmlDataProvider xmlDataProvider = Application.Current.FindResource ("Images") как XmlDataProvider;
XmlDocument xDoc = xmlDataProvider.Document;
В этом случае удалите ресурс XmlDataProvider из элемента Grid.Теперь, когда ваш программный код обновляет XML-файл, пользовательский интерфейс будет автоматически обновляться.
Возможная проблема и решение # 2
Я вижу из вашего метода addImage (), что вы ссылаетесь напеременная экземпляра с именем "xDoc".
Другая возможность состоит в том, что вы создаете NEW XmlDocument в своем конструкторе Window вместо ссылки на объект XmlDocument, созданный в XAML.Если это так, получите экземпляр текущего XmlDocument вместо создания нового экземпляра.Обязательно объявите ресурс на уровне приложения и удалите объявление ресурса из элемента Grid
XmlDataProvider xmlDataProvider = Application.Current.FindResource ("Images") как XmlDataProvider;
Или укажите ссылку наресурс в элементе Grid (вам необходимо добавить имя в Grid) и не объявляйте ресурс в блоке Application.Resources
XmlDataProvider xmlDataProvider = grid.FindResource ("Images") как XmlDataProvider;
XmlDocument xDoc = xmlDataProvider.Document;
Теперь, когда ваш программный код обновляет файл XML, пользовательский интерфейс будет автоматически обновляться.
Выводы
Если вы объявите эти две переменные экземпляра класса в своем коде позади
XmlDataProvider xmlDataProvider;
XmlDataProvider gridXmlDataProvider;
и получите этот код в конструкторе Window
xmlDataProvider = Application.Current.FindResource ("Images") как XmlDataProvider;
gridXmlDataProvider = grid.FindResource ("Images") как XmlDataProvider;
Поставьте точку в обработчике события addImage сразу после добавления узла и сохраните изменения документа XML.Предполагая, что вы изначально загрузили oDoc из xmlDataProvider, как показано выше.Запустите в режиме отладки, откройте окно Watch и просмотрите содержимое xmlDataProvider и gridXmlDataProvider.Откройте свойство Document для каждого и сравните содержимое свойства InnerXml.На xmlDataProvider (ресурс уровня приложения) вы найдете последние изменения узла в файле XML.Не так в gridXmlDataProvider (ресурс элемента XAML UI).Свойство InnerXml не показывает изменений.Без изменений, не нужно обновлять интерфейс.
К вашему сведению У меня была проблема # 1 - тот же ресурс XmlDataProvider, объявленный в блоке Application.Resources И в блоке Window.Resources.Я начал с последнего объявления, столкнулся с ошибкой исключения после того, как обратился к экземпляру XmlDataProvider через Application.Current.FindResource ("name"), скопировал и вставил объявление в блок Application.Resources, оставив ресурс, объявленный вБлок Window.Resources, создающий ДВА РЕФЕРЕНЦИИ.Пользовательский интерфейс XAML использовал контекст данных Window, а мой программный код обновил XML-файл контекстом данных Application!Всякий раз, когда я добавлял или удалял узлы из файла XML, пользовательский интерфейс (ListBox) не обновлялся!
КСТАТИ XmlDataProvider уже реализует свой собственный механизм уведомлений, нет необходимости использовать ObservableCollection.oProv.Refresh () не вызывает обновления связанного пользовательского интерфейса, поскольку он может указывать на другой экземпляр XmlDataProvider (элемента Grid), и, что касается этого экземпляра, никаких изменений не произошло.
Этот ответ, вероятно, приходит слишком поздно для вас, но я только что нашел этот материал, подумал, что поделюсь им.