2

我有一个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。
绑定表达式:路径=范围;数据项=空;目标元素是“计算器”(HashCode=33746798);目标属性是“范围”(类型“范围”)
System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。
绑定表达式:路径=数据源;数据项=空;目标元素是“计算器”(HashCode=33746798);目标属性是“数据源”(类型“IEnumerable”)

我不确定如何解决这个问题,所以任何帮助将不胜感激!

4

1 回答 1

0

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

于 2014-03-19T06:32:54.923 回答