ObservableCollection の ICollectionView を使用して DataGrid にデータを表示しています。各エントリは、IsEnabled プロパティ (DataGridCheckBoxColumn に表示される) と 2 つの整数値 (それぞれが 1 つの 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
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>
この奇妙な動作に遭遇しました。たとえば、データグリッドに 2 つの行があります。行 1 は有効 (アイテムの IsEnabled が true)、行 2 は無効 (アイテムの IsEnabled が false) です。行 1 の整数値の 1 つを編集して Enter キーを押すと、バインディングが期待どおりに更新されます。マウスポインターで同じテキストボックスをもう一度クリックすると、無効な行 (2) の下にあるテキストブロックがアクティブになります (そして、灰色で強調表示されます)。行 1 のテキストブロックを編集したい場合は、行 2 の「フォーカスされた」テキストブロックから逃れるために、別の場所をもう一度クリックする必要があります。3 回目のクリックで、最初に編集したテキストブロックに戻ることができます。
これはデータグリッドのバグですか? 行 1 のテキストボックスをもう一度クリックした後に再度編集できるようにするには、どうすればこれを修正できますか?
何か案は?
ありがとう!