我有一个DataGrid,我想根据ItemSource的值更改行的背景,所以我需要传递当前项,但我不知道如何。
我这样做:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource myDataGridBackgroundMultiValueConverter}">
<MultiBinding.Bindings>
<Binding ElementName="ucPrincipal" Path="DataContext.MyProperty01FromDataContext"/>
<Binding ElementName="ucPrincipal" Path="DataContext.MyProperty02FromDataContext"/>
<Binding ElementName="ucPrincipal" Path="DataContext.MyProperty03FromDataContext"/>
<Binding ElementName="dgdMyGrid" Path="CurrentItem"/>
</MultiBinding.Bindings>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</DataGrid.RowStyle>
DataGrid在ItemsSource
中有MyDataClass
ViewModel
(有许多属性)的集合{{1}}。我需要使用行的信息将MyDataClass传递给转换器。
CurrentItem不起作用,因为我总是收到空。
所有其他参数都可以。
答案 0 :(得分:2)
DataGrid
没有CurrentItem
属性,只有CollectionViews
,DataGrid有SelectedItem
。你也应该看到binding error。
如果按当前项,则表示样式行所属的数据项,即当前行的DataContext
,可以通过<Binding />
定位。
答案 1 :(得分:0)
好吧,最后,我得到了将行的dataContext传递给转换器的方法。我做了以下事情:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Visibility" Value="{Binding ChangeTracker.State, Converter={StaticResource visibilidadFilaBorradaConverter}}"/>
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource ucTareasMatenimientoDataGridBackgroundMultiValueConverter}">
<MultiBinding.Bindings>
<Binding ElementName="ucPrincipal" Path="DataContext.Property01"/>
<Binding Path="DataContext" RelativeSource="{RelativeSource Mode=Self}" />
<Binding ElementName="ucPrincipal" Path="DataContext.Property02"/>
<Binding ElementName="ucPrincipal" Path="DataContext.Property03"/>
<Binding ElementName="ucPrincipal" Path="DataContext.Property04"/>
</MultiBinding.Bindings>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</DataGrid.RowStyle>
在多值转换器的第二个参数中,我使用RelativeSource,以便能够传递该行的datContext。通过这种方式,我可以将其信息与控件的主要dataContext的其他属性进行比较。