1

目前我在一个团队中构建一个包含来自视图模型的数据的数据网格。我们使用的是响应式 UI,数据网格中的每个“行”都由一个继承自“ReactiveObject”的视图模型类表示。

我感兴趣的视图模型中有 2 个属性可以填充每行中的组合框。PossibleScalesDefaultScale的集合。PossibleScales被加载到组合框中,DefaultScale用于将 selecteditem 设置为DefaultScaleDefaultScale始终包含在DefaultScale集合中。我想要实现的是组合框中的任何非默认比例都以斜体格式格式化。所以我创建了一个调用IMultiValueConverter的样式。所以,我需要给这个 IMultiValueConverter 2 个参数,即当前比例(来自 PossibleScales 和 DefaultScale.

这是我们必须用可能的比例列表中的所有项目填充组合框的 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>

如您所见,comboboxitem 的当前值被传递给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 回答