实现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(); }