1

現在、ビューモデルからのデータを含むデータグリッドを構築するチームに所属しています。リアクティブ UI を使用しており、データグリッド内の各「行」は、「ReactiveObject」から継承するビューモデル クラスによって表されます。

ビューモデルには、各行のコンボボックスを埋めるために関心のある 2 つのプロパティがあります。PossibleScalesDefaultScaleのコレクション。PossibleScalesがコンボボックスに読み込まれ、DefaultScale使用して、選択したアイテムがDefaultScaleに設定されます。DefaultScaleは常にDefaultScaleコレクションに含まれています。私が達成したいのは、コンボボックスのデフォルト以外のスケールが斜体でフォーマットされることです。そこで、 IMultiValueConverterを呼び出すスタイルを作成しました。したがって、この IMultiValueConverter 2 パラメーターに現在のスケール (PossibleScales のコレクションと DefaultScale.

これは、PossibleScales のリスト内のすべての項目をコンボ ボックスに入力する必要がある XAML です (EditingElementStyle についても同じです)。

<DataGridComboBoxColumn.ElementStyle>
   <Style TargetType="ComboBox">
       <Setter Property="ItemsSource" Value="{Binding Path=PossibleScales}"  />
       <Setter Property="ItemContainerStyle" Value="{StaticResource Measeurementscale}"></Setter>
   </Style>
</DataGridComboBoxColumn.ElementStyle>

Measeurementscale StaticResourceは、コントロールのリソース セクションでスタイルとして定義されます

<Style x:Key="Measeurementscale" TargetType="ComboBoxItem">
    <Setter Property="FontStyle">
       <Setter.Value>
          <MultiBinding Converter="{StaticResource NonDefaultScaleToItalicConverter}">
              <Binding RelativeSource="{RelativeSource Self}" Path="DataContext"/>
          </MultiBinding>
       </Setter.Value>
    </Setter>
</Style>

ご覧のとおり、コンボボックス項目の現在の値がIMultiValueConverterに渡されるので、これは素晴らしいことです。しかし今、このコンバーターにも DefaultScale (viewmodel のプロパティであり、コントロールの DataContext として定義されている) を渡す方法を考えています。私はこれを行うことができませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

2

を使用FindAncestorして、このデータ コンテキストが設定されている親コントロールを取得し、それにバインドできます。例えば:

<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ComboBox}"
         Path="DataContext.DefaultScale" />
于 2013-02-05T15:06:25.283 に答える