Проверка прокрутки мыши и снятие флажков в DataGrid - PullRequest
3 голосов
/ 20 декабря 2011
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)
    {

    }
}

Я сталкиваюсь с проблемой, что я установил флажки в Datagrid, и я делаю некоторые простые математические вычисления, когда мы нажимаем на флажок, он должен добавить сумму в текстовое поле, и он делает это, нопроблема заключается в том, что при прокрутке мышью вверх и вниз автоматически устанавливаются и снимаются флажки, теперь общая стоимость выбранных элементов в текстовом поле больше, а в выбранных флажках меньше, а иногда и больше, поэтому при перемещении мыши вверх или вниз возникает эта проблема.Любая идея????спасибо

Issue Preview

Ответы [ 3 ]

3 голосов
/ 07 апреля 2015

У меня была точно такая же проблема, со следующим сценарием:

  • У вас есть DataGrid, в каждой строке есть флажок
  • Для флажков установлены события Checked / Unchecked: если выбор несколько, все флажки переключаются
  • Выберите несколько строк
  • Поставьте галочку, отметьте весь выбор
  • Сохранить выбранные строки и прокрутить, чтобы сделать их невидимыми
  • Флажки выбранных строк должны быть отмечены / сняты, как только они исчезнут из пользовательского интерфейса

Решение, данное Jacek, работает, но содержимое больше не прокручивается колесом мыши, курсор мыши должен находиться на полосе прокрутки.

Мне кажется, что в моем проекте работает добавление этого свойства в DataGrid

ScrollViewer.CanContentScroll="False" 

Это очень странно, так как он говорит, что Datagrid не подлежит прокрутке, НО, контент все еще можно прокручивать с помощью колесика мыши, и проблема с переключением статуса флажков больше не возникает.

2 голосов
/ 29 апреля 2016

Вам нужно установить VirtualizingStackPanel.IsVirtualizing="False" в вашей сетке!

0 голосов
/ 09 февраля 2015

У меня была такая же проблема в Silverlight. При прокрутке DataGrid запускает событие RowLoading и повторно инициализирует CheckBoxes. Я нашел только один способ решить эту проблему: не использовать встроенную вертикальную полосу прокрутки DataGrid, установить значение DataGrid для автоматического задания высоты и поместить его в ScrollViewer.

<ScrollViewer VerticalScrollBarVisibility="Visible">
   <DataGrid Height="Auto" />
</ScrollViewer>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...