实现xml和xaml数据双向绑定的问题

我有一个xml文件 其中定义了

<?xml version="1.0" encoding="utf-8" ?>

<colors xmlns="">

	<colora>233</colora>

</colors>

我在xaml中进行了数据绑定 如下
<Slider Maximum="255" Minimum="0" Value="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, XPath=/colors/colora}" x:Name="ColorSliderA"/>

绑定是双向的并且也定义了在属性更改时更新数据源 但是 我移动slider时,数据源的值并不会变 请问要如何做才能让xml中的数据源值改变

-->你得data是在xml里的 我的需要他在一个xml文件中 上面是文件 按你上面的改成这样xml文件还是不会在silder改变的时候 文件自动更新喔!
对XML文件的binding我们要注意一点,就是在运行时,我们对XML数据的任何更改都是在内存中进行的,也就是说这个是临时的,这个更改结果是临时反映在内存中的,如果我们不手动保存到本地硬盘的话,程序一退出,所有的改动都不会自动保存(即使你设置了TwoWay binding).
在这个例子中,我们可以像下面这样保存结果(所有的改动都完成后):

XmlDataProvider xml = this.Resources["xmlData"] as XmlDataProvider;
xml.Document.Save("D:/temp.xml");
如果你原先的XML文件路径是D:/temp.xml,在保存的时候,你可以设成一样,这样新文件就会更换原来的文件了.

-->另外我还想问 如果我上面的文件color那行有多个 是否可以条件绑定到一条上
你可以使用multi value converter,对多个数据进行处理后,再返回一个合适的值。
这是一个关于IMultiValueConverter的MSDN的文档
http://msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.aspx

我想在程序运行时实时显示硬盘上的xml的内容,例如用textblock 显示传感器采集得到的xml数据

我将xml作为xmldataprovider,将textblock.text 和xml内的数据进行了绑定

现在遇到的问题是程序在运行开始时读取了xml内的数据,运行时xml数据改变了,但程序内的显示未发生改变。


我看到在回答问题 “实现xml和xaml数据双向绑定的问题”时 版主提到了

“在运行时,我们对XML数据的任何更改都是在内存中进行的,也就是说这个是临时的,这个更改结果是临时反映在内存中的,如果我们不手动保存到本地硬盘的话,程序一退出,所有的改动都不会自动保存(即使你设置了TwoWay binding).”

我遇到的情况也是这个原因吗? 应该怎么解决呢?

关键:

public MainWindow()
        {
            InitializeComponent();

            XmlDataProvider xml = FindResource("xmlFromFile") as XmlDataProvider;
            System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
            xmldoc.Load("People.xml");
            xml.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"/People.xml", UriKind.RelativeOrAbsolute);

            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = AppDomain.CurrentDomain.BaseDirectory;
            watcher.Changed += new FileSystemEventHandler(watcher_Changed);     
            watcher.EnableRaisingEvents = true;

        }

        void watcher_Changed(object sender, FileSystemEventArgs e)
        {
            Thread.Sleep(100);
            XmlDataProvider xml = FindResource("xmlFromFile") as XmlDataProvider;
            xml.Refresh();
        }

参考例子下载:http://cid-51b2fdd068799d15.office.live.com/self.aspx/.Public/Samples%5E_2011/20110329%5E_FileSystemNotifyWPFXMLBinding.zip

原文地址:https://www.cnblogs.com/wangchunming/p/2638091.html