WPF C#双向数据绑定不起作用

本文关键字:数据绑定 不起作用 WPF | 更新日期: 2023-09-27 18:26:33

我认识到这个问题与其他问题相似,但其他问题在我的情况下不起作用。我正在尝试双向绑定我的WPF中的一个文本框到一个XML文件。

数据完全进入文本框,但当我编辑文本框时,XML文件永远不会更改。根据我在网上发现的,我的代码似乎应该可以工作。这是:

主窗口.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>

我是新手,找不到我的错误。如有任何更正,不胜感激!

WPF C#双向数据绑定不起作用

这里有一个与您的问题非常相似的问题-WPF双向绑定XML

看起来你需要做的不是使用网格,而是使用数据上下文。如果你要做更高级的工作,我建议你使用一个包含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的实际源。