我认识到这个问题与其他人类似,但其他问题在我的情况下并不奏效。我正在尝试双向将我的WPF中的文本框绑定到XML文件。
数据完全进入文本框,但是当我编辑文本框时,XML文件永远不会改变。根据我在网上找到的内容,我的代码似乎应该可行。这是:
MainWindow.xaml
<Window x:Class="Learning_0._002.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Main Window"
WindowStartupLocation="CenterScreen"
Height="400" Width="950">
<Grid>
<Grid.Resources>
<XmlDataProvider x:Key="BusinessInfo" Source="BusinessData.xml" XPath="/Businesses/Business"/>
</Grid.Resources>
<Grid x:Name="BusinessInfo" DataContext="{StaticResource BusinessInfo}">
<TextBox Name="Name" Grid.Row="0" Grid.Column="1" Text="{Binding XPath=@Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Margin="106,93,717,250"/>
</Grid>
</Grid>
BusinessData.xml
<?xml version="1.0" encoding="utf-8" ?>
<Businesses>
<Business Name="Sample Company" Address="1234 East Road St. City, California 90068" Phone="555-555-5555" Fax="555-555-5556" Email="myemail@example.net" Website="www.example.com"/>
</Businesses>
我是新手,无法找到我的错误。任何更正都表示赞赏!
答案 0 :(得分:1)
这是一个与你的问题非常相似的问题 - WPF two-way binding XML
看起来你需要做的不是使用Grid.Resources而是需要使用datacontext。如果您要进行更高级的工作,我建议您使用包含UI元素背后所有数据的类。查看此MSDN以获取更多信息 - http://msdn.microsoft.com/en-us/library/ms743695(v=vs.110).aspx
<Grid.DataContext>
<XmlDataProvider x:Name="XMLData" Source="BusinessData.xml" XPath="/Businesses/Business"/>
</Grid.DataContext>
<Grid x:Name="BusinessInfo" Margin="98,49,118,144">
<TextBox Name="Name" Text="{Binding XPath=@Name, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TextChanged="Name_TextChanged" />
</Grid>
然后在C#中,只要他们在文本框中输入文本就会保存它
private void Name_TextChanged(object sender, TextChangedEventArgs e)
{
XMLData.Document.Save("XMLFile1.xml");
}
您应该知道,当您保存文件时,它将保存到您运行可执行文件的目录。您当然可以将保存它的位置更改为XML的实际来源。