zoukankan      html  css  js  c++  java
  • 实现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

  • 相关阅读:
    团队作业6——展示博客(alpha阶段)
    第八天敏捷冲刺
    第七天敏捷冲刺
    第六天敏捷冲刺
    第五天敏捷冲刺
    第四天敏捷冲刺
    第三天敏捷冲刺
    linux查询内存使用情况
    input hidden 属性
    于Java网络爬虫---模拟txt文件上传操作。
  • 原文地址:https://www.cnblogs.com/wangchunming/p/2638091.html
Copyright © 2011-2022 走看看