hallo forum
ich bin etwas verzweifelt! ich versuche vergeblich ein DataGrid an einen XmlDataProvider zu binden.
ich habe es geschafft das ich das dokument darstellen und die einträge auch verändern kann (das mit dem verändern
hat beim binden an ein XElement nicht geklappt!). leider schaffe ich es nicht die geänderten daten beim binden an
einen XmlDataProvider zu speichern.
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| <dynamic-text> <header> <default-language>deutsch</default-language> <default-font> <language>deutsch</language> </default-font> <default-font> <language>english</language> </default-font> </header> <text-list> <text prefix="user" id="0"> <deutsch>test 0 deutsch</deutsch> <english>test 0 english</english> </text> <text prefix="user" id="1"> <deutsch>test 1 deutsch</deutsch> <english>test 1 english</english> </text> </text-list> </dynamic-text> |
die anzahl der sprachen ist dabei nicht konstant sondern kann variieren daher muss ich die columns des grids im code aufbauen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| XmlDataProvider dp; private void UserControl_Loaded(object sender, RoutedEventArgs e) { dp = new XmlDataProvider(); System.Xml.XmlDocument xd = new System.Xml.XmlDocument(); xd.Load(@"C:\C# Projekte\XMLReader\dummyFile.xml"); dp.Document = xd; dp.XPath = "dynamic-text/text-list/text"; mainGrid.DataContext = dp;
foreach (System.Xml.XmlLinkedNode item in dp.Document.GetElementsByTagName("language")) { string language = item.InnerText; DataGridTemplateColumn tc = new DataGridTemplateColumn(); tc.Header = language; DataTemplate dt = new DataTemplate(); FrameworkElementFactory fe = new FrameworkElementFactory(typeof(TextBox)); fe.SetValue(TextBox.TextProperty, new Binding() { XPath = language, Mode = BindingMode.TwoWay }); fe.SetValue(TextBox.BorderThicknessProperty, new Thickness(0)); fe.SetValue(TextBox.AcceptsReturnProperty, true); dt.VisualTree = fe; tc.CellTemplate = dt; dataGrid.Columns.Add(tc); } }
private void UserControl_Unloaded(object sender, RoutedEventArgs e) { dp.Document.Save(@"C:\C# Projekte\XMLReader\dummyFile.xml"); } |
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| <UserControl.Resources> <DataTemplate x:Key="idTemplate"> <TextBox Text="{Binding XPath=@id}" BorderThickness="0"></TextBox> </DataTemplate> <DataTemplate x:Key="prefixTemplate"> <TextBox Text="{Binding XPath=@prefix}" BorderThickness="0"></TextBox> </DataTemplate> </UserControl.Resources> <Grid Name="mainGrid"> <DataGrid Grid.Column="1" ItemsSource="{Binding}" AutoGenerateColumns="False" Name="dataGrid"> <DataGrid.Columns> <DataGridTemplateColumn Header="id" CellTemplate="{StaticResource idTemplate}"></DataGridTemplateColumn> <DataGridTemplateColumn Header="prefix" CellTemplate="{StaticResource prefixTemplate}"></DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid> |