2012-11-21 5 views
2

저는 ControlTemplate을 가지고 있는데 두 개의 컬렉션을 가져 와서 하나의 컬렉션으로 결합하여 ItemsControl에 바인딩합니다.이 계산은 Calculator 개체로 수행됩니다. 템플릿의 ResourceDictionary 내에 인스턴스를 만듭니다.ControlTemplate 내의 TemplatedParent에 바인딩합니다.

<Setter Property="Template"> 
    <Setter.Value> 
    <ControlTemplate TargetType="{x:Type local:IndicatorBar}"> 
     <ControlTemplate.Resources> 
      <local:Calculator 
      x:Key="_calculator" 
      Ranges="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Ranges}" 
      DataSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DataSource}" /> 
     </ControlTemplate.Resources> 

     <ItemsControl ItemsSource="{Binding Ratios, Source={StaticResource _calculator}}"> 
      <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Border Background="{Binding Range}"> 
       <TextBlock Text="{Binding Ratio}" Foreground="White" /> 
       </Border> 
      </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

그러나이 제대로 작동 및 바인딩 오류가 발생하지 않습니다

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element.
BindingExpression:Path=Ranges; DataItem=null; target element is 'Calculator' (HashCode=33746798); target property is 'Ranges' (type 'Ranges')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element.
BindingExpression:Path=DataSource; DataItem=null; target element is 'Calculator' (HashCode=33746798); target property is 'DataSource' (type 'IEnumerable')

을 나는이 문제를 해결받을 수있는 방법을 모르는, 그래서 어떤 도움을 주시면 감사하겠습니다!

+0

오류는 targetElement가 "Calculator"이지만 ControlTemplate이 "local : IndicatorBar"로 입력되었음을 나타냅니다. 이 두 객체는 ​​어떻게 당신의 나무와 관련이 있습니까? –

+0

컨텍스트를 설명하기에는 너무 적은 코드가 있습니다. 이 템플릿 사용 방법 (예 : XAML에서 사용되는 IndicatorBar 유형) 및 범위와 데이터 소스 속성을 설정 한 코드를 게시하십시오. –

+1

계산기에 대한 소스가 있다면 아마도 매개 변수로 두 개의 콜렉션을 취하는 다중 값 변환기로 만들 것입니다. 그런 다음 변환기와 함께 ItemsSource 바인딩을 수행 할 수 있습니다. – Andy

답변

0

처음에는 바인딩이 RelativeSource.TemplatedParent 모드를 사용하므로 바인딩 소스가이 템플릿을 적용하는 컨트롤입니다. 나는 생각하지 않는다 TemplatedParent은 귀하의 케이스에 적합합니다. 에 대해 link을 참조하십시오. TemplatedParent을 사용하십시오. 계산기 컨트롤에 바인딩하기위한 데이터가 포함 된 모델을 추가 할 수 있습니까?

관련 문제