C# 绑定到ControlTemplate内的TemplatedParent。资源

C# 绑定到ControlTemplate内的TemplatedParent。资源,c#,wpf,xaml,C#,Wpf,Xaml,我有一个ControlTemplate,在其中我想将两个集合合并成一个集合,然后绑定到ItemsControl。计算由Calculator对象完成,我在模板的ResourceDictionary中创建了该对象的实例 <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:IndicatorBar}"> <Cont

我有一个
ControlTemplate
,在其中我想将两个集合合并成一个集合,然后绑定到
ItemsControl
。计算由
Calculator
对象完成,我在模板的
ResourceDictionary
中创建了该对象的实例

<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错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。
BindingExpression:路径=范围;DataItem=null;目标元素是 “计算器”(HashCode=33746798);目标属性为“范围”(类型 “范围”)
System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。
BindingExpression:Path=DataSource;DataItem=null;目标元素是 “计算器”(HashCode=33746798);目标属性为“数据源” (键入“IEnumerable”)


我不知道我如何才能绕过这个问题,所以任何帮助都将不胜感激

首先,使用RelativeSource.TemplatedParent模式进行绑定,因此绑定的源是应用此模板的控件。我认为TemplatedParent不适合您的情况。 请参阅此文档以了解模板家长的使用。
是否可以添加包含绑定到计算器控件的数据的模型?

错误显示targetElement为“Calculator”,但您的控件模板键入的是“local:IndicatorBar”。这两个对象在树中是如何关联的?代码太少,无法描述上下文。请发布您如何使用此模板(例如,XAML中使用的IndicatorBar类型)以及设置其范围和数据源属性的代码。如果您有计算器的源代码,那么我可能会将其作为一个多值转换器,将两个集合作为参数。然后您可以通过转换器执行ItemsSource绑定。Calculator类中的范围和Datasource属性是依赖属性?@BillTarbell如果您在XAML中看到,我有一个计算器正在处理控件的输入,然后边框绑定到计算器的输出。