我正在使用ObservableCollection的ICollectionView来显示DataGrid中的数据。每个条目都包含一个IsEnabled属性(显示在DataGridCheckBoxColumn中)和两个Integer值(每个值在一个DataGridTextColumn中)。 当IsEnabled为false时,使用以下样式禁用整行:
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="False">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
datagrid如下所示:
<DataGrid
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="false"
AutoGenerateColumns="false"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Path=ListView, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Path=IsEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</DataGridCheckBoxColumn>
<DataGridTextColumn Header="Name" Width="*" IsReadOnly="True"
Binding="{Binding Path=Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextAlignment" Value="Left"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="*" Binding="{Binding Path=Min, Mode=TwoWay}">
<DataGridTextColumn.Header>
<TextBlock HorizontalAlignment="center" Text="Min"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Width="*" Binding="{Binding Path=Max, Mode=TwoWay}">
<DataGridTextColumn.Header>
<TextBlock HorizontalAlignment="center" Text="Max"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
我遇到这种奇怪的行为: 我在datagrid中有两行。第1行已启用(项目的IsEnabled为true),第2行已禁用(项目的IsEnabled为false)。如果我编辑第1行中的一个整数值并按Enter键,绑定将按预期更新。当我用鼠标指针再次点击同一个文本框时,禁用行(2)下面的文本块被激活(并以一些灰色突出显示)。如果我想要编辑第1行中的文本块,我必须再次点击其他地方,以便远离“焦点”#39;第2行中的文本块,第三次点击我可以回到我最初编辑的文本块中。
这是数据网格中的错误吗? 我怎么能纠正这个问题,这样我再次点击它后可以再次编辑第1行的文本框?
有什么想法吗?
谢谢!