からのデータの保存に問題がありますTreeView
。TreeView
からにデータを保存する方法について多くのトピックをグーグル検索しましたがXML
、それを作成する方法をいくつか見ました。しかし、それらはすべて を使用してWindowsForms application
おり、誰も -を使用していませんWPF
でした。これらの例を に変換しようとしましWPF
たが、どれも正しく動作しません。それを作る方法はありますか?私が移植しようとした方法の1つ:
void SaveToXml(TreeView tw)
{
XmlDocument d = new XmlDocument();
XmlNode n = d.CreateNode(XmlNodeType.Element, "root", "");
foreach (TreeViewItem t in tw.Items)
{
n.AppendChild(getXmlNode(t, d));
}
d.AppendChild(n);
d.Save(AppDomain.CurrentDomain.BaseDirectory + "out.xml");
}
private XmlNode getXmlNode(TreeViewItem tnode, XmlDocument d)
{
XmlNode n = d.CreateNode(XmlNodeType.Element, tnode.Name, " ");
foreach (TreeViewItem t in tnode.Items)
{
n.AppendChild(getXmlNode(t, d));
}
return n;
}
ArgumentException
「ローカル要素と属性の名前を空にすることはできません」とスローされます。D:\
コードを使用して、ドライブ上のファイルに関する情報を保存しようとしています:
private void ListDirectory(TreeView treeView, string path)
{
var rootDirectoryInfo = new DirectoryInfo(path);
treeView.Items.Add(CreateDirectoryNode(rootDirectoryInfo));
}
private static TreeViewItem CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeViewItem();
directoryNode.Header = directoryInfo.Name;
try
{
foreach (var directory in directoryInfo.GetDirectories())
directoryNode.Items.Add(CreateDirectoryNode(directory));
foreach (var file in directoryInfo.GetFiles())
directoryNode.Items.Add(new TreeViewItem { Header = file.Name });
}
catch (UnauthorizedAccessException e)
{ }
return directoryNode;
}
正常に動作し、TreeView
すべてのフォルダーとファイルが表示されます。TreeView
からまでのデータを保存する方法を教えてくださいXML
。ありがとう。
これを試しました:
public void exportToXml(TreeView tv, string filename)
{
sr = new StreamWriter(filename, false, System.Text.Encoding.UTF8);
//Write the header
sr.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
//Write our root node
sr.WriteLine("<ROOT>");
foreach (TreeViewItem node in tv.Items)
{
saveNode(node.Items);
}
//Close the root node
sr.WriteLine("</ROOT>");
sr.Close();
}
private void saveNode(TreeViewItem[] tnc)
{
foreach (TreeViewItem node in tnc)
{
//If we have child nodes, we'll write
//a parent node, then iterrate through
//the children
if (node.Items.Count > 0)
{
sr.WriteLine("<" + node.Name + ">");
saveNode(node.Items);
sr.WriteLine("</" + node.Name + ">");
}
else //No child nodes, so we just write the text
sr.WriteLine(node.Name);
}
}
でもsaveNode(node.Items);
と で型が違うとnode.Items
のことなTreeViewItem[]
ので を試してみList<TreeViewItem>
ましたが、エラーは同じです。