【问题标题】:Current datagrid item and multibinding当前数据网格项和多重绑定
【发布时间】:2012-09-13 11:05:41
【问题描述】:

我有一个DataGrid,我想在其中根据ItemSource的值来改变一行的背景,所以我需要传递当前的item,但是我不知道怎么做。

我正在这样做:

<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 在ViewModel 中具有MyDataClass(具有许多属性)的集合,如ItemsSource。我需要将带有行信息的 MyDataClass 传递给转换器。

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

其他参数都ok。

【问题讨论】:

    标签: wpf xaml data-binding datagrid


    【解决方案1】:

    DataGrid 没有CurrentItem 属性,只有CollectionViews 有,DataGrid 有一个SelectedItem。因此,您也应该看到 binding error。

    如果当前项是指样式化行所属的数据项,即当前行的DataContext,可以通过&lt;Binding /&gt; 定位。

    【讨论】:

    • selectedItem 就是一个例子。我的意思是我想知道该行的信息。
    • @Daimroc:那不应该是该行的DataContext 吗?即简单地&lt;Binding /&gt;
    【解决方案2】:

    好吧,最后,我找到了将行的 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 的其他属性进行比较。

    【讨论】:

    • 正如我所说,&lt;Binding /&gt; 应该做的完全一样,没有多余的相对来源。
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多