У меня есть представление, которое показывает список, привязанный к GetAll():
<DockPanel>
<ListBox ItemsSource="{Binding GetAll}"
ItemTemplate="{StaticResource allCustomersDataTemplate}"
Style="{StaticResource allCustomersListBox}">
</ListBox>
</DockPanel>
GetAll() — это свойство ObservableCollection в моей ViewModel:
public ObservableCollection<Customer> GetAll
{
get
{
return Customer.GetAll();
}
}
который, в свою очередь, вызывает метод модели GetAll(), который считывает файл XML для заполнения ObservableCollection.:
public static ObservableCollection<Customer> GetAll()
{
ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
XDocument xmlDoc = XDocument.Load(Customer.GetXmlFilePathAndFileName());
var customerObjects = from customer in xmlDoc.Descendants("customer")
select new Customer
{
Id = (int)customer.Element("id"),
FirstName = customer.Element("firstName").Value,
LastName = customer.Element("lastName").Value,
Age = (int)customer.Element("age")
};
foreach (var customerObject in customerObjects)
{
Customer customer = new Customer();
customer.Id = customerObject.Id;
customer.FirstName = customerObject.FirstName;
customer.LastName = customerObject.LastName;
customer.Age = customerObject.Age;
customers.Add(customer);
}
return customers;
}
Все это работает нормально, ЗА ИСКЛЮЧЕНИЕМ случаев, когда пользователь переходит к другому представлению, редактирует XML-файл и возвращается к этому представлению, где по-прежнему отображаются старые данные.
Как я могу указать этому представлению "обновить свои привязки", чтобы отображать фактические данные.
Такое ощущение, что я говорю о WPF здесь со слишком большим количеством метафоры HTML/HTTP, я чувствую, что есть более естественный способ заставить ObservableCollection обновлять себя, отсюда и его название, но это единственный способ, которым я могу заставить пользователя иметь возможность редактировать данные в приложении WPF в данный момент. Так что здесь приветствуется помощь на любом уровне.