2013-06-19 2 views
6

좋아 ... 나는 아이 ItemsControl에 데이터 템플릿 내부에서 부모의 ItemsControl의 속성을 결합 할 수 있어야합니다 :는 WPF 아동 ItemsControl에 데이터 템플릿의 내부에서 부모 ItemsControl에 바인딩

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

다음과 같은 유형 인의 그 MyParentCollection (외부 모음)을 가정 해 봅시다 :

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

을 그리고 위의 클래스는 다음과 같은 유형 인에서의 그 MyChildObject을 가정 해 봅시다 :

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

내부 데이터 템플릿의 내부에서 MyParentCollection.Value에 어떻게 바인딩 할 수 있습니까? FindAncestor를 모두 유형별로 사용할 수는 없습니다. 왜냐하면 두 레벨 모두 동일한 유형을 사용하기 때문입니다. 아마도 외부 컬렉션에 이름을 넣고 내부 바인딩에 ElementName 태그를 사용할 수 있지만 속성을 확인할 수 없다고 생각했습니다.

의견이 있으십니까? 나는 ItemsControl에이

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

는 테스트하지 작동하지만, 올바른 방향으로 당신에게 힌트를 줄 수 ...

+0

FindAncestor 모드를 사용할 수없고 유형 및 조상 수준을 모두 지정할 수 없습니까? –

+0

흠, 조상 수준조차 생각조차하지 않았다 ... 나는 그걸 보겠다 –

+0

잘 작동하지 않는 것 같아요. 오, 잘. –

답변

12

아이의 태그의 상위 항목을 저장이 하나 붙어 :)

+0

이것은 유망한 것처럼 보입니다. 그것이 작동하는 방법을 알려주십시오 –

+0

테스트를 거쳤으며 이것이 실제로 완벽하게 작동합니다. 테스트되지 않았지만 작동하는 코드에 대해서는 아무 것도 실제로 코드에서 변경 될 필요가 없었습니다. –

+0

그럼에도 불구하고 하루의 해킹이 있었지만 그날을 저장했습니다. 고마워요! 바인딩 태그 지정은 바인딩 컨텍스트에 대한 참조를 만들고 컨텍스트에있는 내용을 복제하지 않기를 바랍니다. –