다음은 XML을 TreeView 바인딩에 구현하는 방법에 대한 기본 예제입니다. XmlDataProvider를 사용하면 XML 문서를로드하고 바인딩 할 수 있습니다. HierarchicalDataTemplate을 사용하면 하위 항목이있는 TreeView 템플릿을 정의 할 수 있습니다. XPath는 Path 대신 바인드해야하며 @ 기호 접두사는 속성에 바인딩됨을 나타냅니다.
<Window x:Class="Testing.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<XmlDataProvider x:Key="people" XPath="People" />
<HierarchicalDataTemplate x:Key="colorsTemplate">
<TextBox Text="{Binding [email protected], Mode=TwoWay}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="rootTemplate" ItemsSource="{Binding XPath=FavoriteColors/Color}" ItemTemplate="{StaticResource colorsTemplate}">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding [email protected], Mode=TwoWay}" />
<TextBlock Text=" " />
<TextBox Text="{Binding [email protected], Mode=TwoWay}" />
<TextBlock Text=" (Age: " />
<TextBox Text="{Binding [email protected], Mode=TwoWay}" />
<TextBlock Text=")" />
</StackPanel>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView ItemsSource="{Binding Source={StaticResource people}, XPath=Person}" ItemTemplate="{StaticResource rootTemplate}" Grid.ColumnSpan="2" />
</Grid>
</Window>
다음 XML 파일을 사용하여
:
<?xml version="1.0" encoding="utf-8" ?>
<People>
<Person FirstName="Ringo" LastName="Starr" Age="72">
<FavoriteColors />
</Person>
<Person FirstName="George" LastName="Harrison" Age="52">
<FavoriteColors>
<Color Name="Orange" />
<Color Name="Green" />
<Color Name="Purple" />
</FavoriteColors>
</Person>
<Person FirstName="Paul" LastName="McCartney" Age="42">
<FavoriteColors>
<Color Name="White" />
</FavoriteColors>
</Person>
<Person FirstName="John" LastName="Lennon" Age="33">
<FavoriteColors>
<Color Name="Red" />
<Color Name="Green" />
</FavoriteColors>
</Person>
</People>
을 그리고 다음 코드 숨김 :
XmlDataProvider people;
public MainWindow()
{
InitializeComponent();
people = FindResource("people") as XmlDataProvider;
var xmlDocument = new XmlDocument();
xmlDocument.Load("People.xml");
people.Document = xmlDocument;
}
할 수 있도록, 내가 코드에서 XML 문서를로드하고 볼 수 있듯이 그것을 XDocument 또는 XmlDocument 클래스에로드하고 원하는 방식으로 정렬하십시오. 그런 다음 어떤 시점에서 다시 파일에 저장할 수 있어야합니다.
편집 :
다음로드의 예입니다 런타임에 저장하기 :
private void Load_Click(object sender, RoutedEventArgs e)
{
var xmlDocument = new XmlDocument();
xmlDocument.Load("People.xml");
people.Document = xmlDocument;
}
private void Save_Click(object sender, RoutedEventArgs e)
{
XmlDocument xml = people.Document;
if (xml != null)
{
Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
if ((bool)sfd.ShowDialog(this))
{
xml.Save(sfd.FileName);
}
}
}
귀하의 질문은 질문 제목에 맞지 않습니다. 이 XML 파일 정렬 또는 TreeView 바인딩? 귀하의 질문은 XML에 관한 것이지 WPF에 관한 것이 아닙니다. 분류가 끝나면 나중에 바인드하고 바인딩이 이미 작동한다고 말한 것에서 바인딩하려고합니다. –
미안하지만 설명이 필요합니다. linq를 사용하여 XML 문서를 쉽게 정렬 할 수 있지만 일단 정렬되고 메모리에 저장되면 어떻게 트리 뷰에 바인딩합니까? –