2016-04-07 8 views
0

ローミングappdataのxmlファイルによって読み込まれるリストビューを持つUWP windows 10アプリケーションを作成します。xmlファイルの一部を削除するUWPリストセレクタ

ここで、リスト項目をクリックすると、そのXMLファイルもビューで編集したいと思います。私はそれを削除するまで私は得ると思うが、私はそれを元に戻す方法を知らない。以前は銀色のアプリケーションでは「ストリーム」を利用していました。

var tmp1 = (Country)PhrasesList.SelectedItem; 
      var tmp2 = tmp1.Name; 

      string phrasesXMLPath = Path.Combine(Windows.Storage.ApplicationData.Current.RoamingFolder.Path + "/quickphrases.xml"); 

      XDocument doc2 = XDocument.Load(phrasesXMLPath); 


      // Retrieve and remove the certain "Mapping" element with its descendants 
      var deleted = doc2.Root.Descendants("item").Single(d => d.Element("name").Value == tmp2); 
      deleted.Remove(); 

答えて

0

UWPアプリでは、XmlDocument classを使用してすべてのXMLオブジェクトを取得して作成できます。

私はあなたのリストがXMLファイル内の子ノード(XMLElement)を提示し、あるノード(XMLText)のテキストではないと仮定します。例えば、XML内にノードのリストを作成し、このようなローミングファイル:

private async void Create_File(object sender, RoutedEventArgs e) 
{ 
    XmlDocument xdoc = new XmlDocument(); 
    XmlElement root = xdoc.CreateElement("List"); 
    xdoc.AppendChild(root); 
    for (int i = 0; i < 100; i++) 
    { 
     XmlElement item = xdoc.CreateElement("item" + i); 
     root.AppendChild(item); 
    } 
    XmlElement books = xdoc.CreateElement("Books"); 
    StorageFolder roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder; 
    StorageFile xmlFile = await roamingFolder.CreateFileAsync("XMLList.xml", CreationCollisionOption.ReplaceExisting); 
    await xdoc.SaveToFileAsync(xmlFile); 
} 

このコードは、XMLファイルの「ルート」を作成し、この「ルート」で、各項目は"Item" + iという名前のノードの100の項目があります。

その後、我々はこのようなListViewにこれらの項目を読んでする必要があります。私は多分あなたはすでにすべての作業を終えたと思う

public class MyList 
{ 
    public string xmlitem { get; set; } 
} 

private ObservableCollection<MyList> mylist = new ObservableCollection<MyList>(); 
private async void Read_Data_Root(object sender, RoutedEventArgs e) 
{ 
    StorageFolder roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder; 
    StorageFile xmlFile = await roamingFolder.GetFileAsync("XMLList.xml"); 
    XmlDocument xdoc = await XmlDocument.LoadFromFileAsync(xmlFile); 
    txt.Text = xdoc.GetXml(); //show the XML representation of the node and all its descendants in a textblock. 
    XmlElement root = xdoc.DocumentElement; 
    mylist.Clear(); 
    foreach (var item in root.ChildNodes) 
    { 
     mylist.Add(new MyList { xmlitem = item.GetXml() }); 
    } //show all items in a listview 
} 

クラスMyListこのように簡単です上記の場合、ListViewSelectionChanged eventでアイテムを削除し、Flyoutのアイテムを削除することを確認します。ここには私のListView

です
<ListView x:Name="listView" Grid.Row="0" SelectionChanged="Show_Delete_Button" ItemsSource="{x:Bind mylist}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding xmlitem}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <FlyoutBase.AttachedFlyout> 
     <Flyout> 
      <Button Content="Delete this item" Click="Delete_Data" /> 
     </Flyout> 
    </FlyoutBase.AttachedFlyout> 
</ListView> 

とデータを削除するためのコード:

private int selectedindex; 

private void Show_Delete_Button(object sender, SelectionChangedEventArgs e) 
{ 
    FlyoutBase.ShowAttachedFlyout(sender as ListView); 
    selectedindex = listView.SelectedIndex; 
} 

private async void Delete_Data(object sender, RoutedEventArgs e) 
{ 
    var item = mylist.ElementAt(selectedindex); 
    mylist.RemoveAt(selectedindex); //remove from listview 
    StorageFolder roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder; 
    StorageFile xmlFile = await roamingFolder.GetFileAsync("XMLList.xml"); 
    XmlDocument xdoc = await XmlDocument.LoadFromFileAsync(xmlFile); 
    XmlElement root = xdoc.DocumentElement; 
    string itemstring = item.xmlitem.TrimStart('<'); 
    itemstring = itemstring.TrimEnd('>', '/'); 
    root.RemoveChild(root.GetElementsByTagName(itemstring).FirstOrDefault()); //remove from root element. 
    await xdoc.SaveToFileAsync(xmlFile); //save the new list 
} 

これはXMLファイルからノードリストを削除するためのコードです。 XMLファイルでリストを作成して別の方法で作成した場合は、コードを投稿してください。ところで、ここでは名前空間 "System.Xml"ではなく、名前空間 "Windows.Data.Xml.Dom"を使用します。

関連する問題