silverlight将文本框保存为xml

silverlight将文本框保存为xml,xml,silverlight,save,export,Xml,Silverlight,Save,Export,我的项目看起来像这样 我已经可以使用以下代码将文本框保存到xml文件: private void SaveFile(object sender, RoutedEventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.DefaultExt = "xml"; saveFileDialog.Filter = "XML Files (*

我的项目看起来像这样

我已经可以使用以下代码将文本框保存到xml文件:

private void SaveFile(object sender, RoutedEventArgs e)
    {

        SaveFileDialog saveFileDialog = new SaveFileDialog();

        saveFileDialog.DefaultExt = "xml";
        saveFileDialog.Filter = "XML Files (*.xml)|*.xml|All files (*.*)|*.*";
        saveFileDialog.FilterIndex = 1;

        if (saveFileDialog.ShowDialog() == true)
        {


            using (Stream stream = saveFileDialog.OpenFile())
            {

                StreamWriter sw = new StreamWriter(stream, System.Text.Encoding.UTF8);
                sw.Write(GetGeneratedXML().ToString());
                sw.Close();

                stream.Close();

            } 

        }
                }


    private XElement GetGeneratedXML()
    {

        XElement userInformation = new XElement("names");
        userInformation.Add(new XElement("first", box1.Text));
       // userInformation.Add(new XElement("last", lastNameText.Text));

        return userInformation;

    }
但这是从一个已经在XAML中创建的文本框(我只用于测试),我想要的是保存通过单击按钮创建的所有文本框的文本

以下是我创建文本框的方式:

XAML:

编辑-----------

这是MyBox.cs

    public partial class MyBox : UserControl
    {
        public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register("Header", typeof(string), typeof(MyBox),null);
        public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Content", typeof(string), typeof(MyBox), null);

        public string Header
        {
            get { return GetValue(HeaderProperty) as string; }
            set { SetValue(HeaderProperty, value); }
        }

        public string Text
        {
            get { return GetValue(TextProperty) as string; }
            set { SetValue(TextProperty, value); }
        }

        public MyBox()
        {
            InitializeComponent();

            this.DataContext = this;

        }  
    }
}

只需跟踪列表中的所有框:

IList<MyBox> boxes = new List<MyBox>();

private void b_ClickEntidade(object sender, RoutedEventArgs e)
{
    MyBox c = new MyBox();
    c.Header = "Entidade";
    c.Text = "Atributos";

    ...

    boxes.Add(c);
} 

只需跟踪列表中的所有框:

IList<MyBox> boxes = new List<MyBox>();

private void b_ClickEntidade(object sender, RoutedEventArgs e)
{
    MyBox c = new MyBox();
    c.Header = "Entidade";
    c.Text = "Atributos";

    ...

    boxes.Add(c);
} 

这个例子得到了所有的文本框,唯一的问题是这个“Atributos Atributos Atributos Atributos Atributos”。。。它得到的是原始的文本框,而不是经过编辑的文本框,所以您在UI中更改了文本,而在XML序列化时却没有得到它?绑定是双向和实时更新的,所以应该可以工作……是的,我编辑了文本,但在xml中它显示为原始版本。我已经对它进行了测试,工作正常(我猜“b.Header”和所有其他属性也没有更新?请显示更多代码。该示例获取所有文本框,唯一的问题是“Atributos Atributos Atributos Atributos Atributos”…它得到的是原始文本框,而不是经过编辑的文本框,因此您在UI中更改了文本,但在XML序列化时没有得到它?绑定是双向的,实时更新,所以应该可以工作…是的,我编辑了文本,但在XML中它显示为原始文本。我已经测试过,它工作正常。:(我猜是“b.Header”并且所有其他属性也没有更新?请显示更多代码。有一个输入错误(我的错误):应该是“…TextProperty=dependencProperty.Register”(“Text”,“…”不应该解决您的问题,但这是朝着正确方向迈出的一步。:)检查调试时输出中是否出现一些绑定错误。尝试插入任何方法(如事件处理程序)并选中复选框,它们没有理由不更新。我发现了错误,->TextBox Text=“{binding Header,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}”,缺少mode=twoway..再次感谢您的帮助:)顺便说一句,你知道一种更好的方法来连接这些框吗?现在我按照你在图中看到的方式连接它们,但是当我移动这些框时,我需要单独移动连接。这个问题在这里->至于绑定,这是因为在Silverlight绑定中默认为单向,而在WPF中,一些绑定默认为双向,如TextBox。Text beca使用这是你99%的时间都想要的。我在WPF中测试,没有使用SL,因为…有一段时间:)有一个输入错误(我的错误):应该是“…TextProperty=dependencProperty.Register”(“Text”,“…”不应该解决你的问题,但这是朝着正确方向迈出的一步。:)检查在调试时输出中是否出现一些绑定错误。并尝试插入任何方法(如事件处理程序)并选中复选框,它们没有理由不更新。我发现了错误,->TextBox Text=“{Binding Header,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}”,Mode=TwoWay缺失。。再次感谢您的帮助:)顺便问一下,您知道更好的接线盒连接方式吗?现在,我正在按照图中所示的方式连接它们,但是当我移动盒子时,我需要分别移动连接。。这个问题在这里->至于绑定,这是因为在Silverlight绑定中默认为单向,而在WPF中,一些绑定默认为双向,比如TextBox.Text,因为这是您99%的时间想要的。我在WPF中测试,没有使用SL,因为。。。一会儿:)
IList<MyBox> boxes = new List<MyBox>();

private void b_ClickEntidade(object sender, RoutedEventArgs e)
{
    MyBox c = new MyBox();
    c.Header = "Entidade";
    c.Text = "Atributos";

    ...

    boxes.Add(c);
} 
private XElement GetGeneratedXML()
{
    XElement userInformation = new XElement("names");

    foreach (MyBox b in boxes)
    {        
        userInformation.Add(new XElement("first", b.Text));
    }

    return userInformation;
}