Laden...

[gelöst] Binding ermitteln

Erstellt von HeinzTomato vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.705 Views
HeinzTomato Themenstarter:in
345 Beiträge seit 2005
vor 16 Jahren
[gelöst] Binding ermitteln

Jetzt wirds mal wieder etwas kniffliger.

Folgenden XAML-Code habe ich:

  <ListBox x:Name="DstandVBstand"  ItemsSource="{Binding Source={StaticResource getTableList}}" >
      <ListBox.ItemTemplate>
        <DataTemplate>
          <StackPanel Margin="8" Width="Auto">
            <Grid Width="Auto">
              <Grid.ColumnDefinitions>
                <ColumnDefinition Width="90"/>
                <ColumnDefinition Width="0.211*"/>
                <ColumnDefinition Width="0.186*"/>
                <ColumnDefinition Width="0.349*"/>
                <ColumnDefinition Width="0.254*"/>
              </Grid.ColumnDefinitions>
              <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition Height="25"/>
                <RowDefinition Height="25"/>    
              </Grid.RowDefinitions>

              <Label Margin="8,0,0,0" FontSize="17" Foreground="DarkGreen" x:Name="txtImmoTitle" VerticalAlignment="Top" Height="30" Grid.Column="1" Grid.ColumnSpan="4" Content="{Binding Path=sta_aktion}" />
              <Label Margin="8,0,0,0" VerticalAlignment="Top" Height="Auto" Grid.Row="1" Grid.Column="1" Content="Erstellungsdatum:"  />
              <Label Margin="8,0,0,0" VerticalAlignment="Top" Height="Auto" Grid.Row="1" Grid.Column="2" Content="{Binding Path=sta_tag}" />        
              <Label Margin="8,0,0,0" VerticalAlignment="Top" Height="Auto" Grid.Row="2" Grid.Column="1" Content="Zurückdatum:" />
              <Label Margin="8,0,0,0" VerticalAlignment="Top" Height="Auto" Grid.Row="2" Grid.Column="2" Content="{Binding Path=sta_zur}" />
              <Label Margin="8,0,0,0" VerticalAlignment="Top" Height="Auto" Grid.Row="1" Grid.Column="3" Content="{Binding Path=sta_kennz}" />
        
            </Grid>            
          </StackPanel>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>

Klappt auch alles Wunderbar, die einzelnen Label im Stackpanel der Listbox zeigen die Werte der Bindings an:

Da ich ja eine XAML-Speicherroutine schreibe, möchte ich auf die einzelnen Elemente zugreifen. Dazu wander ich das Fensterobjekt rekursiv solange durch, bis ich alle Objekte erfasst habe. Soweit. So gut. Wenn ich aber nun beim einzelnen Label angekommen bin, hat dies keinen Content. Macht auch irgendwo Sinn, da das Content ja nicht statisch ist. Doch - nun endlich zur eigentlichen Frage 🙂 - Wie komme ich vom Label-Objekt an dessen Binding?

Zur besseren Veranschaulichung vielleicht ein Auszug der Speicherroutine:

      
function saveOneElement(int tabs, TextWriter tw, object o) {
switch (o.getType().ToString())
  case "StackPanel":
          StackPanel stackpanel=(StackPanel)o;
          [...]
          if (stackpanel.Children.Count > 0) {
            for (int i = 0; i < stackpanel.Children.Count; i++) {
              saveOneElement(tabs + 1, tw, stackpanel.Children[i]);
            }
          }
          break;
  case "Label":
        Label label = (Label)o;
          [..]
          string labelval=label.Content; // <-- __HIER__ würde ich gerne aufs Binding zugreifen.
          break;

Mein Haus, mein Viertel, mein Blog

HeinzTomato Themenstarter:in
345 Beiträge seit 2005
vor 16 Jahren

Wenn ich jemals sicher war, das Problem nicht mehr allein zu lösen, dann hier. Nichtsdestotrotz kam doch noch der Geistesblitz, den ich Niemanden vorenthalten möchte 🙂

Das Binding habe ich wie folgt ermittelt:

 BindingExpression be = label.GetBindingExpression(Label.ContentProperty);
            if (be!=null) {            
              tw.WriteLine(mkTabs(tabs +1)+"<Label.Content>");
              tw.WriteLine(mkTabs(tabs + 2)+ "<Binding XPath=\""+be.ParentBinding.Path.Path+"\" />");
              tw.WriteLine(mkTabs(tabs + 1)+ "</Label.Content>");
            }

Perfekt 🙂

Mein Haus, mein Viertel, mein Blog