目前,我正在一个团队中构建一个包含来自视图模型的数据的数据网格。我们使用的是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)传递给此转换器。我无法做到这一点。
任何帮助将不胜感激。
答案 0 :(得分:2)
您可以使用FindAncestor
来获取设置此数据上下文的父控件,并绑定到它。例如:
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ComboBox}"
Path="DataContext.DefaultScale" />