当前的datagrid项和多绑定

时间:2012-09-13 11:05:42

标签: wpf xaml data-binding datagrid

我有一个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不起作用,因为我总是收到空。

所有其他参数都可以。

2 个答案:

答案 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的其他属性进行比较。