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
このように簡単です上記の場合、ListView
のSelectionChanged 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"を使用します。