我有一个xml文件 其中定义了
233
我在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的文档
我想在程序运行时实时显示硬盘上的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(); }
参考例子下载: