gpt4 book ai didi

c# - 以编程方式将 xml 文档绑定(bind)到 WPF 中的 TreeView

转载 作者:行者123 更新时间:2023-11-30 22:28:06 25 4
gpt4 key购买 nike

我一直在谷歌上进行一些搜索,并在 SO 上阅读了一些类似的问题,但还没有找到我的问题的答案。我将一个 xml 文件绑定(bind)到 WPF 中的 TreeView 控件。使用 this article 我可以轻松地使用我的 xml 文件设置双向数据绑定(bind)。

但是,我想在附加 xml 文档之前对其进行排序。我正在为一个任务管理器建模,其中任务包含开始日期和截止日期,我想按待定截止日期对节点进行排序,以便最紧急的任务首先出现。我对 Linq to XML 有一些经验,但不确定如何处理绑定(bind)问题。有什么想法吗?

所以在阅读更多内容后,这里是我的伪代码:

  • 从我的本地 XML 文件创建 XDocument
  • 根据任务截止日期对 XDocument 进行排序
  • 从新排序的 XDocument 创建一个新的 XmlDataProvider
  • 将其绑定(bind)到 TreeView

谁能帮我解决这个问题?

最佳答案

下面是一个如何实现 XML 到 TreeView 绑定(bind)的基本示例。 XmlDataProvider 允许您加载 XML 文档并绑定(bind)到它。 HierarchicalDataTemplate 允许您定义带有子项的 TreeView 模板。必须使用XPath而不是Path来绑定(bind),@符号前缀表示绑定(bind)到一个属性。

<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 XPath=@Name, Mode=TwoWay}" />
</HierarchicalDataTemplate>

<HierarchicalDataTemplate x:Key="rootTemplate" ItemsSource="{Binding XPath=FavoriteColors/Color}" ItemTemplate="{StaticResource colorsTemplate}">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding XPath=@FirstName, Mode=TwoWay}" />
<TextBlock Text=" " />
<TextBox Text="{Binding XPath=@LastName, Mode=TwoWay}" />
<TextBlock Text=" (Age: " />
<TextBox Text="{Binding XPath=@Age, 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);
}
}
}

关于c# - 以编程方式将 xml 文档绑定(bind)到 WPF 中的 TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10953835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com