wpf xml twoway data binding problem?

  • Thread starter Thread starter dave
  • Start date Start date
D

dave

I am trying to link to some simple xml data in a local file...

<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DisplayName>Line Rate</DisplayName>
<Location>Line test change</Location>
</dataroot>


I have tried a couple ways, but right now have this in the xaml:

<Window.Resources>
<XmlDataProvider x:Key="datarootDS" Source="C:\demo\test.xml"
d:IsDataSource="True"/>
</Window.Resources>
<Window.DataContext>
<Binding Mode="TwoWay" Source="{StaticResource datarootDS}"
XPath="/dataroot" />
</Window.DataContext>

then the control looks like:
<TextBox Margin="0,0,0,0" Grid.Column="1" Text="{Binding Mode=TwoWay,
UpdateSourceTrigger=LostFocus, XPath=/dataroot/Location}" TextWrapping="Wrap"
HorizontalAlignment="Stretch" TextChanged="OnTextBoxChanged"/>

I get data from the xml to the control just fine on startup, but it doesn't
save changes from the control back to the xml file. am i missing something
in the link back to the xml file? i have also tried the explicit trigger
and manually calling the updatesource function but it still doesn't get
written back to the file.
 
Hi Dave,

When using the TwoWay binding mode, data binding does update the data in
the XmlDataProvider if the bound TextBox's text is changed. But data
binding doesn't save the changes back to the local xml file.

To save changes back to the local xml file, you can get the XmlDocument
object representing the xml file and call the Save method to save the
changes to the xml file. You can do this work in the TextChanged event
handler of the TextBox. For example:

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
XmlDataProvider provider =
(XmlDataProvider)this.FindResource("datarootDS");
provider.Document.Save(@"C:\demo\test.xml");
}

Hope this helps.
If you have any question, please feel free to let me know.

Sincerely,
Linda Liu
Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
Linda Liu said:
Hi Dave,

When using the TwoWay binding mode, data binding does update the data in
the XmlDataProvider if the bound TextBox's text is changed. But data
binding doesn't save the changes back to the local xml file.

To save changes back to the local xml file, you can get the XmlDocument
object representing the xml file and call the Save method to save the
changes to the xml file. You can do this work in the TextChanged event
handler of the TextBox. For example:

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
XmlDataProvider provider =
(XmlDataProvider)this.FindResource("datarootDS");
provider.Document.Save(@"C:\demo\test.xml");
}

Hope this helps.
If you have any question, please feel free to let me know.

Sincerely,
Linda Liu
Microsoft Online Community Support

Yes, that makes sense and is what I finally determined had to be the case.
It would be good if the help said something like this and if there was an
example that pointed out the use of the xml document as part of the
databinding. When doing data binding with expression blend it 'looks' like
you are binding directly to the xml file. I did finally change the binding
to use the xml to linq xelement as a data source and manually read and saved
the file when I wanted to from code.
 
Back
Top