Одним из вариантов может быть отслеживание изменений в файле XML
через FileSystemWatcher
и обновление XmlDataProvider
после внесения изменений в файл XML.
На небольшом поиске я нашел это . Пользовательский XMLDataProvider
со встроенной функцией поиска любых изменений в XML-файле с помощью FileSystemWatcher
.
public class MyXmlDataProvider : XmlDataProvider
{
public new Uri Source
{
get { return base.Source; }
set
{
base.Source = value;
FileSystemWatcher watcher = new FileSystemWatcher();
//set the path of the XML file appropriately as per your requirements
watcher.Path = AppDomain.CurrentDomain.BaseDirectory;
//name of the file i am watching
watcher.Filter = value.OriginalString;
//watch for file changed events so that we can refresh the data provider
watcher.Changed += new FileSystemEventHandler(file_Changed);
//finally, don't forget to enable watching, else the events won't fire
watcher.EnableRaisingEvents = true;
}
}
void file_Changed(object sender, FileSystemEventArgs e)
{
base.Refresh();
}
}
Это будет работать в вашем сценарии. Взгляните на связанную статью, например, и более подробную информацию
Редактировать
Вы можете сделать две вещи.
Либо создайте свойство, содержащее путь к исходному файлу, и свяжите его со свойством Source объекта XMLDataProvider. Как только файл получит изменения, вызовите событие измененного свойства, чтобы поставщик данных XML обновлял / перезагружал свой источник (я не проверял это)
или
Обновите XMLDataProvider с помощью кода путем сброса источника в тот же файл.
Сказав, что я должен сказать, что это неправильный способ играть с XML. В идеале вы должны загрузить XML в некоторую структуру данных, например, в коллекцию Observable, а затем использовать уведомление об изменении свойства, чтобы обновить данные в вашем элементе управления