Извините, я не знаю, что: D
Хорошо, у вас может быть метод для расчета выбранного пути к дереву:
public string SelectedTreeExplorerPath { get; set; }
private void GetSelectedTreeExplorerPath(TreeViewItem treeItem)
{
if (treeItem == null)
return;
SelectedTreeExplorerPath = "";
string temp1 = "";
string temp2 = "";
while (true)
{
temp1 = treeItem.Header.ToString();
if (temp1.Contains(@"\"))
{
temp2 = "";
}
SelectedTreeExplorerPath = temp1 + temp2 + SelectedTreeExplorerPath;
if (treeItem.Parent.GetType().Equals(typeof(TreeView)))
{
break;
}
treeItem = ((TreeViewItem)treeItem.Parent);
temp2 = @"\";
}
}
В вашем дереве SeViewItemChanged событие TreeView вы можете запустить это событие:
private void treeViewItem_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeView tree = (TreeView)sender;
TreeViewItem treeItem = ((TreeViewItem)tree.SelectedItem);
GetSelectedTreeExplorerPath(treeItem);
}
После того, как вы получите имя дерева, которое вы нажали:
string treeItemName = Path.GetFileName(SelectedTreeExplorerPath);
Теперь вы создаете:
XPathDocument doc;
XPathNavigator nav;
XPathExpression expr;
XPathNodeIterator iterator;
Теперь для поиска в вашем XML-файле внутри вас treeViewItem_SelectedItemChanged - это:
doc = new XPathDocument(FILE_NAME);
nav = doc.CreateNavigator();
// Compile a standard XPath expression
expr = nav.Compile("/catalog/cd/title");
iterator = nav.Select(expr);
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();
if (nav2.Value == treeItemName)
{
// repleace item as showed in the example project provided as resource below
}
}
В этой статье показано, как работать с XPath. Там демонстрируют, как обновить, удалить или добавить новый элемент. Войдите сюда и загрузите проект, чтобы узнать знания о том, как работает XPathNavigator и изменить элементы.
Надеюсь, это поможет и у вас получится.
Привет!