저는 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')
을 나는이 문제를 해결받을 수있는 방법을 모르는, 그래서 어떤 도움을 주시면 감사하겠습니다!
오류는 targetElement가 "Calculator"이지만 ControlTemplate이 "local : IndicatorBar"로 입력되었음을 나타냅니다. 이 두 객체는 어떻게 당신의 나무와 관련이 있습니까? –
컨텍스트를 설명하기에는 너무 적은 코드가 있습니다. 이 템플릿 사용 방법 (예 : XAML에서 사용되는 IndicatorBar 유형) 및 범위와 데이터 소스 속성을 설정 한 코드를 게시하십시오. –
계산기에 대한 소스가 있다면 아마도 매개 변수로 두 개의 콜렉션을 취하는 다중 값 변환기로 만들 것입니다. 그런 다음 변환기와 함께 ItemsSource 바인딩을 수행 할 수 있습니다. – Andy