2012-01-17 29 views
0

当我有一个绑定到一个XML文件中的列表视图丢失。可以使用文本框来更改XML文件的不同节点的值。如果我改变了直接绑定到listview元素的元素的值,一切正常。如果我根据其他值更改XML文件中的值,然后必须刷新XML数据提供者以查看列表框中的更改,则问题会开始。如果我这样做,那么我以前的SelectedItem会丢失。我也尝试保存SelectedItem并刷新后重新加载它,但它不起作用。的SelectedItem刷新XML的DataProvider

是否有刷新XML数据提供程序的替代方法? 还是有更好的方法来刷新ListView?

在Window1.xaml


...

 <Grid.DataContext> 
      <XmlDataProvider x:Name="VoltageData" Source="Voltages.xml" XPath="Voltages/Voltage" /> 
     </Grid.DataContext> 


...
在Window1.xaml.cs:
...

 xmlDoc.Save(VoltageData.Source.LocalPath); 
     VoltageData.Refresh(); 

...

+0

XML提供者不执行INotifyPropertyChanged。如果你有一个知道的结构,你可以将XML加载到实现INotifyPropertyChanged的类中,然后将该类放入ObservableCollection并将其绑定到ListView。在类属性的集合中,您将更新XML。 – Paparazzi 2012-01-17 18:10:11

回答

0
  1. 刷新前获取列表视图的选定项目(我更喜欢SelectedValue)。
  2. 刷新相同选择的项目(或SelectedValue)设置到ListView之后。

这样,它会保持选择。如果使用WPF绑定绑定选定的项目(或值),则更新表示绑定源路径的object \属性。