2013-06-19 1 views
6

Okay, so ich ein flippiges man hier haben ... Ich muss aus dem Inneren eines Kindes Itemsdatenvorlage zu einem übergeordneten Itemseigenschaften zu binden in der Lage sein:WPF Bindung an Eltern Items aus dem Inneren Kind Itemsdatenvorlage

<ItemsControl ItemsSource="{Binding Path=MyParentCollection, UpdateSourceTrigger=PropertyChanged}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 

       <ItemsControl ItemsSource="{Binding Path=MySubCollection}"> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=MyParentCollection.Value, UpdateSourceTrigger=PropertyChanged}"/> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 

     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

lassen Sie uns diesen MyParentCollection nehmen (die äußere Sammlung) ist der folgenden Art:

public class MyObject 
{ 
    public String Value { get; set; } 
    public List<MyChildObject> MySubCollection { get; set; 
} 

Und lassen Sie uns, dass MyChildObject gehe davon aus, die oben Klasse des folgenden Typs ist:

public class MyChildObject 
{ 
    public String Name { get; set; } 
} 

Wie kann ich aus der inneren Datenvorlage an MyParentCollection.Value binden? Ich kann einen FindAncestor nicht wirklich nach Typ verwenden, da beide Ebenen die gleichen Typen verwenden. Ich dachte, vielleicht könnte ich der äußeren Sammlung einen Namen geben und ein ElementName-Tag in der inneren Bindung verwenden, aber die Eigenschaft konnte immer noch nicht aufgelöst werden.

Irgendwelche Gedanken? Ich bin auf diese stecken ...

+0

Können Sie den FindAncestor-Modus nicht verwenden und sowohl einen Type- als auch einen Ahnen-Level angeben? –

+0

hmmm, habe nicht einmal an Ahnenebene gedacht ... Ich werde mir das mal ansehen –

+0

Ich kann es nicht so hinkriegen, dass es funktioniert, naja –

Antwort

12

in dem Tag des Kindes das übergeordnete Element Einsparung könnte Items arbeiten

<DataTemplate> 

      <ItemsControl ItemsSource="{Binding Path=MySubCollection}" Tag="{Binding .}"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=Tag.Value, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 

    </DataTemplate> 

seine nicht getestet, aber geben Ihnen einen Hinweis in die richtige Richtung :)

+0

Das scheint vielversprechend ... Ich werde mich später damit befassen lass dich wissen, wie es funktioniert –

+0

Getestet und das funktioniert in der Tat perfekt ... Kudos für nicht getestete aber funktionierende Code, nichts wirklich geändert werden musste von Ihrem Code –

+0

Hack des Tages, aber trotzdem den Tag gerettet. Vielen Dank! Ich hoffe, dass die Kennzeichnung Bindung nur einen Verweis auf den Bindungskontext macht und nicht das, was im Kontext ist. –