Autor Beitrag
wpf chris
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 24.02.11 14:01 
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.

ausblenden 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.

ausblenden 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");
        }


ausblenden 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>
wpf chris Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 27.02.11 14:30 
ok hab herausgefunden das es nicht am dataprovider sondern an den datatemplates liegt, ohne die templates läuft das ganze wie erwartet!