WPF DataGrid自动选择复选框错误?

时间:2019-04-24 05:48:03

标签: c# wpf datagrid

我有一个DataGrid,并正在加载一些自定义类型的数据。也有一个Checkbox column。选中复选框后,当前代码行将通过以下代码获取。对于第一个复选框,它很好。

然后我选中了另一个复选框,但它被选中,但是当我滚动浏览数据时,我看到了其他一些行自动选中了复选框!当我再次上一次时,我第一次选择的复选框现在未选中,而其他复选框则自动被选中!

我用于检查事件的代码。

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    var selectedOrder = MyDataGrid.SelectedItem as AutoOrderClass;
    if (selectedOrder != null)
    {
        var order = SelectedOrdersList.FirstOrDefault(x => x.VendorName == selectedOrder.VendorName);
        if (order == null)
        {
            OrdersCount++;
            TotalOrders.Text = "Total Orders : " + OrdersCount;
        }

        SelectedOrdersList.Add(selectedOrder);
    }
}   

这是Xaml

<DataGrid x:Name="MyDataGrid" VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True"
          AutoGenerateColumns="False"
          HorizontalScrollBarVisibility="Auto" Height="{Binding ActualHeight, ElementName=DataGridContainerPanel}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn x:Name="CheckBoxColumn" Header="Select">
            <DataGridCheckBoxColumn.CellStyle>
                <Style>
                    <EventSetter Event="CheckBox.Checked" Handler="CheckBox_Checked"/>
                    <EventSetter Event="CheckBox.Unchecked" Handler="CheckBox_Unchecked"/>
                </Style>
            </DataGridCheckBoxColumn.CellStyle>
        </DataGridCheckBoxColumn>
        <DataGridTextColumn Header="Item Name" Width="120" Binding="{Binding Name}"></DataGridTextColumn>
        <DataGridTextColumn Header="Description" IsReadOnly="True" Width="*" Binding="{Binding Description}"></DataGridTextColumn>
        <DataGridTextColumn Header="VendorName" IsReadOnly="True" Width="*" Binding="{Binding VendorName}"></DataGridTextColumn>
        <DataGridTextColumn Header="Quantity In Hand" Width="100" Binding="{Binding StockQuantity}"></DataGridTextColumn>
        <DataGridTextColumn Header="Order QTY" Width="70" Binding="{Binding OrderQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}"></DataGridTextColumn>
        <DataGridTextColumn Header="Unit Price" Width="80" Binding="{Binding UnitPrice,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}"></DataGridTextColumn>
        <DataGridTextColumn Header="Total Price" Width="70" Binding="{Binding TotalPrice,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}"></DataGridTextColumn>
    </DataGrid.Columns>

</DataGrid>  

这是正在发生的事情的图片!
第一张照片:都很好,只能选择第一行

第二张图片::选择另一个BUT,但第三列已自动选中当我向下滚动时,我也看到其他一些列被选中

第三张图片:现在,我向上滚动并看到第一个复选框被自动取消选中的方式? enter image description here

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

@SajithSageer 所说,将EnableRowVirtualization= false设置为DataGrid可解决此问题。