我有一个绑定到对象的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的新手。
由于
答案 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
对于每个列模板。