C# 刷新XML数据提供程序时,Listview的SelectedItem丢失

C# 刷新XML数据提供程序时,Listview的SelectedItem丢失,c#,wpf,listview,xmldataprovider,C#,Wpf,Listview,Xmldataprovider,我有一个绑定到XML文件的Listview。可以使用文本框更改XML文件不同节点的值。如果我更改了一个元素的值,该元素直接绑定到listview中的元素,那么一切正常。如果我根据其他值更改XML文件中的值,然后必须刷新XML数据提供程序以查看列表框中的更改,那么问题就开始了。如果这样做,则以前选择的编辑项将丢失。我还试图保存SelectedItem并在刷新后重新加载,但没有成功 是否有其他方法刷新XML数据提供程序? 还是有更好的方法重新构建ListView 在Window1.xaml中:

我有一个绑定到XML文件的Listview。可以使用文本框更改XML文件不同节点的值。如果我更改了一个元素的值,该元素直接绑定到listview中的元素,那么一切正常。如果我根据其他值更改XML文件中的值,然后必须刷新XML数据提供程序以查看列表框中的更改,那么问题就开始了。如果这样做,则以前选择的编辑项将丢失。我还试图保存SelectedItem并在刷新后重新加载,但没有成功

是否有其他方法刷新XML数据提供程序? 还是有更好的方法重新构建ListView

在Window1.xaml中:

  • 刷新前,获取列表视图的选定项(我更喜欢
    SelectedValue
  • 刷新后,将相同的所选项目(或
    SelectedValue
    )设置到ListView

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

    XML提供程序不实现INotifyPropertyChanged。如果您知道结构,那么可以将XML加载到实现INotifyPropertyChanged的SLA中,然后将该类放入ObservableCollection并将其绑定到ListView。在类属性的集合中,您将在其中更新XML。
           <Grid.DataContext>
                <XmlDataProvider x:Name="VoltageData" Source="Voltages.xml" XPath="Voltages/Voltage" />
           </Grid.DataContext>
    
            xmlDoc.Save(VoltageData.Source.LocalPath);
            VoltageData.Refresh();