2

ControlTemplate2 つのコレクションを取り込んで、それらを にバインドする 1 つのコレクションに結合したい があります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); ターゲット プロパティは 'Ranges' (タイプ 'Ranges')
です System.Windows.Data エラー: 2: ターゲット要素の管理 FrameworkElement または FrameworkContentElement が見つかりません。
BindingExpression:Path=データソース; DataItem=null; 対象要素は「電卓」(HashCode=33746798); ターゲット プロパティは 'DataSource' (タイプ 'IEnumerable') です。

この問題を回避する方法がわからないので、助けていただければ幸いです。

4

1 に答える 1

0

最初に、RelativeSource.TemplatedParentモードを使用してバインディングを行うため、バインディングのソースは、このテンプレートを適用するコントロールになります。TemplatedParentはあなたのケースには適していないと思います。TemplatedParentの使用については、このリンクを参照してください。Calculator コントロールにバインドするためのデータを含むモデルを追加できますか?

于 2014-03-19T06:32:54.923 に答える