Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF C#双向数据绑定不工作_C#_Xml_Wpf_Xaml_Data Binding - Fatal编程技术网

WPF C#双向数据绑定不工作

WPF C#双向数据绑定不工作,c#,xml,wpf,xaml,data-binding,C#,Xml,Wpf,Xaml,Data Binding,我承认这个问题与其他问题类似,但其他问题在我的情况下并不适用。我正在尝试将WPF中的文本框双向绑定到XML文件 数据完全进入文本框,但当我编辑文本框时,XML文件从未更改。根据我在网上的发现,我的代码似乎应该可以工作。这是: MainWindow.xaml <Window x:Class="Learning_0._002.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

我承认这个问题与其他问题类似,但其他问题在我的情况下并不适用。我正在尝试将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>


我是新手,找不到我的错误。任何更正都将不胜感激

这里有一个与你的问题非常相似的问题-

看起来您需要做的不是使用网格,而是使用datacontext。如果您要做更高级的工作,我建议您使用一个包含UI元素后面所有数据的类。查看此MSDN以了解更多信息-


然后在C#中,只要他们在文本框中输入文本,您就可以保存它

private void Name\u TextChanged(对象发送者,textchangedventargs e)
{
XMLData.Document.Save(“XMLFile1.xml”);
}


您应该知道,当您保存文件时,它将保存到与您运行可执行文件的目录相同的目录中。当然,您可以更改保存它的位置,使其成为XML的实际源

我认为双向绑定对XML数据源不起作用,即使它起作用,也不会将更改刷新到磁盘上。它会帮你吗?正如上面链接
中提到的,XmlDataProvider本机不支持双向绑定。
XML文件从未更改过
——这不是数据绑定的工作方式。听起来您的XML文件是项目的一部分?我知道你在解决方案浏览器中看到了吗?如果是这样,它在运行时永远不会被更改,您需要将它复制到输出目录,并像上面的链接所示保存它。@HighCore--是的,XML文件是项目的一部分。如果有问题,我使用的Visual Studio Express 2013不起作用。没有引发错误,但未编辑该文件。是否检查输出目录以确保实际创建并保存了
XMLFile1.xml
?我没有将它命名为
BusinessData.xml
,它可能与您引用它的路径不同。我将您的代码更改为BusinessData.xml。但是,我会在Visual Studio中看到更改吗?只有打开了正确的文件。如果要修改保存位置,请单击。如果解决方案的根目录中有XML文件,只需将保存的行更改为:
XMLData.Document.Save(“../../BusinessData.XML”)好的,当您调用行
XMLData.Document.Save(“XMLFile1.xml”)将文件保存在运行文件的任何位置。例如,假设您的应用程序名为
app.exe
,它位于
C:\Test\app.exe
中,那么要保存的XML将位于
C:\Test\XMLFile.XML
中。我想说的是,当您调用
XMLData.Document.Save(“BusinessData.xml”)您需要确保将XML文件保存到XAML文件引用它的相同位置。尝试在文件资源管理器中查看您的项目,以查看任何重复的XML文件