目前,我所在的团队正在构建一个数据网格,其中包含来自视图模型的数据。我们使用的是反应式ui,数据网格中的每个"行"都由一个继承自"反应对象"的视图模型类表示。
视图模型中有两个我感兴趣的属性,用于在每行中填充一个组合框。PossibleScale和DefaultScale的集合。PossibleScale被加载到组合框中,DefaultScale用于将selecteditem设置为Default Scale。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>
MeaseurementscaleStaticResource定义为控件的资源部分中的一种样式。
<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>
正如您所看到的,comboxitem的当前值被传递到IMultiValueConverter,所以这很好。但现在我想知道如何将DefaultScale(它是视图模型的一个属性,定义为控件的DataContext)也传递给这个转换器。我没能做到这一点。
如有任何帮助,我们将不胜感激。
您可以使用FindAncestor
获取设置此数据上下文的父控件,并绑定到它。例如:
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ComboBox}"
Path="DataContext.DefaultScale" />