鼠标滚动选中和取消选中 DataGrid 中的复选框

dnx*_*xit 5 c# wpf

private void OnChecked(object sender, RoutedEventArgs e)
{
    try
    {
        LAB_TEST t = new LAB_TEST();
        CheckBox chk = (CheckBox)e.OriginalSource;
        if (e.OriginalSource is CheckBox)
        {
            int OID = Convert.ToInt32(((CheckBox)chk).Tag);
            t = eb.TestGetByOID(OID);
            bool has = advisedTests.Any(test => test.OID == OID);
            if (!has)
            {
                if (txtGrossAmount.Text != string.Empty)
                {
                    decimal amount = Convert.ToDecimal(txtGrossAmount.Text);
                    amount += Convert.ToDecimal(t.PRICE);
                    txtGrossAmount.Text = amount.ToString();
                }
                else
                {
                    txtGrossAmount.Text = t.PRICE.ToString();
                }
                advisedTests.Add(t);
            }
        }
    }
    catch (Exception ex)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我面临这个问题,我在 Datagrid 中绑定了复选框,当我们单击复选框时,我正在做一些简单的数学计算,它应该在文本框中添加总和,它正在这样做,但问题是鼠标向上滚动并自动向下选中和取消选中复选框,现在文本框中所选项目的总价更高,所选复选框更少或有时更多,因此鼠标向上或向下滚动会产生此问题。任何的想法????谢谢

问题预览

Mar*_*rco 5

你需要VirtualizingStackPanel.IsVirtualizing="False"在你的网格中设置!


Jac*_*zel 0

我在 Silverlight 中也遇到了同样的问题。当您滚动时,DataGrid 会触发 RowLoading 事件,并重新初始化复选框。我发现只有一种方法可以解决它,不要使用内置垂直滚动条DataGrid,将DataGrid高度设置为auto并将其放置在ScrollViewer中。

<ScrollViewer VerticalScrollBarVisibility="Visible">
   <DataGrid Height="Auto" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)