-1

我有一个 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 传递给转换器。MyDataClassViewModel

CurrentItem 不起作用,因为我总是收到 null。

其他参数一切正常。

4

2 回答 2

2

DataGrid没有CurrentItem属性,只有CollectionViews,DataGrid 有一个SelectedItem. 因此,您也应该看到一个绑定错误

如果当前项是指样式化行所属的数据项,它将是DataContext当前行的数据项,可以通过<Binding />.

于 2012-09-13T11:39:51.910 回答
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 的其他属性进行比较。

于 2012-09-13T14:54:52.140 回答