datagrid中的错误?禁用数据网格行的奇怪行为

时间:2014-03-27 10:05:03

标签: wpf mvvm datagrid observablecollection icollectionview

我正在使用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行的文本框?

有什么想法吗?

谢谢!

0 个答案:

没有答案