条件格式化Combox中的项目

时间:2013-02-05 14:55:41

标签: wpf xaml combobox viewmodel wpfdatagrid

目前,我正在一个团队中构建一个包含来自视图模型的数据的数据网格。我们使用的是reactive-ui,datagrid中的每个“row”都由一个继承自“ReactiveObject”的viewmodel类表示。

视图模型中有2个属性,我们有兴趣在每行中填充组合框。 PossibleScales DefaultScale 的集合。 PossibleScales 被加载到组合框中, DefaultScale 用于将selecteditem设置为 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)传递给此转换器。我无法做到这一点。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用FindAncestor来获取设置此数据上下文的父控件,并绑定到它。例如:

<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ComboBox}"
         Path="DataContext.DefaultScale" />