设置数据绑定数据网格的行属性

时间:2010-12-09 15:11:39

标签: wpf datagrid

我有一个绑定到对象的DataGrid(使用MVVM模式)。

<DataGrid ItemsSource="{Binding Path=RecordSet}"
          AutoGenerateColumns="False"
          IsReadOnly="True"
          Name="ResultGrid">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding="{Binding Path=Id}" Width="Auto"/>
        <DataGridTextColumn Header="Foo" Binding="{Binding Path=Foo}" Width="*"/>
    </DataGrid.Columns>
</DataGrid>

下面:

RecordSet is a List<Record>.

这很好用。数据加载很好,一切都很好。我想知道是否有我在个别行上设置一些属性,即将一行属性绑定到我的ViewModel中的值(根据Record.Enable设置每一行的Row.IsEnable) 我是WPF的新手。

由于

3 个答案:

答案 0 :(得分:3)

这应该有效。将此样式放在DataGrid中。

<DataGrid.RowStyle>                
            <Style TargetType="DataGridRow">       
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Enabled}"  Value="false">
                        <Setter Property="Visibility" Value="Hidden"/>
                        <Setter Property="Height" Value="0"/>
                    </DataTrigger>                        
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>

如果未启用绑定此行的记录,这将使行不可见并且没有高度。 “{Binding Path = Enabled}”中的Enabled属性属于您的记录。我不知道你是否已经拥有它,但你需要类似的东西。

答案 1 :(得分:3)

跟进wangburger的回答。
要将每个DataGridRow的IsEnabled属性绑定为在Record中启用,您可以执行此操作

<DataGrid ItemsSource="{Binding Path=RecordSet}" 
          AutoGenerateColumns="False" 
          IsReadOnly="True" 
          Name="ResultGrid"> 
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <Setter Property="IsEnabled" Value="{Binding Enabled}"/>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns> 
        <DataGridTextColumn Header="ID" Binding="{Binding Path=Id}" Width="Auto"/> 
        <DataGridTextColumn Header="Foo" Binding="{Binding Path=Foo}" Width="*"/> 
    </DataGrid.Columns> 
</DataGrid> 

答案 2 :(得分:0)

注意:如果将行样式设置为IsEnabled=false,则根本无法实际选择该行,光标键也不会跳过该行。这可能是也可能不是你想要的。

如果您想要专门设置IsEnabled=false(并且我意识到您只是将其作为示例),但仍允许该行可选,那么您需要(AFAIK)来设置IsEnabled=false对于每个列模板。