Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从xml加载值并在所有页面中使用它们?_C#_Xml_Wpf - Fatal编程技术网

C# 如何从xml加载值并在所有页面中使用它们?

C# 如何从xml加载值并在所有页面中使用它们?,c#,xml,wpf,C#,Xml,Wpf,所以,我正在开发一个小的WPF应用程序,主要是为了学习。 我的WPF应用程序中有多个页面,每个页面上都有滑块、复选框等。现在,我要做的是将controlelements中的所有值保存在一个xml文件中。当我重新启动应用程序时,它应该读取xml并使用其中存储的值 我知道如何在一个简单的windowsforms中完成它,但我无法让它与WPF一起工作。欢迎使用StackOverflow:D 这里有一个简单的例子,使用: 我将制作一个小窗口,显示一些设置 using System.IO; using S

所以,我正在开发一个小的WPF应用程序,主要是为了学习。 我的WPF应用程序中有多个页面,每个页面上都有滑块、复选框等。现在,我要做的是将controlelements中的所有值保存在一个xml文件中。当我重新启动应用程序时,它应该读取xml并使用其中存储的值


我知道如何在一个简单的windowsforms中完成它,但我无法让它与WPF一起工作。

欢迎使用StackOverflow:D

这里有一个简单的例子,使用:

我将制作一个小窗口,显示一些设置

using System.IO;
using System.Windows;
using System.Xml.Serialization;

namespace WpfApplication1
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            // Create XML sample data
            var settings = new MySettings {Setting1 = "hello !", Setting2 = "hi !"};
            var serializer1 = new XmlSerializer(typeof (MySettings));
            string xml;
            using (TextWriter textWriter = new StringWriter())
            {
                serializer1.Serialize(textWriter, settings);
                xml = textWriter.ToString();
            }

            // Deserialize that sample data to an object
            var serializer2 = new XmlSerializer(typeof (MySettings));
            MySettings deserialize;
            using (var stringReader = new StringReader(xml))
            {
                deserialize = serializer2.Deserialize(stringReader) as MySettings;
            }

            // Use deserialized data as our context
            if (deserialize != null)
            {
                DataContext = deserialize;
            }
        }
    }

    public class MySettings
    {
        public string Setting1 { get; set; }
        public string Setting2 { get; set; }
    }
}
XAML部分(在我看来,您最感兴趣的部分):


设置1
设置2
因此:

<?xml version="1.0" encoding="utf-16"?>
<MySettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Setting1>hello !</Setting1>
  <Setting2>hi !</Setting2>
</MySettings>

你好
你好
我们最终得出以下结论:


是的,很好。但是现在让我们假设我有另一个窗口MainWindow2。在该窗口中,我想加载值,例如“hello!”,将其更改为“再见”,然后在MainWindow2中有一个按钮保存它,以便MainWindow显示“再见”。这是我在atm上遇到的关键问题,我不知道如何将它从MainWindow2“发送回”到XML。要做到这一点,请在App.xaml.cs中创建一个静态“MySettings”属性,确保它实现INotifyPropertyChanged,然后在两个窗口上绑定到此属性。对任一窗口所做的任何更改都将被传播。
<?xml version="1.0" encoding="utf-16"?>
<MySettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Setting1>hello !</Setting1>
  <Setting2>hi !</Setting2>
</MySettings>