Удалить фокус из ячейки в сетке данных WPF - PullRequest
0 голосов
/ 04 апреля 2020

у меня есть простая таблица данных

    MySqlCommand cmd = m.getmodel(stmt);
    MySqlDataAdapter dataAdapter = new MySqlDataAdapter(cmd);
    DataTable data = new DataTable(equip);
    dataAdapter.Fill(data);
    var checkBoxColumn = new DataColumn("Select", typeof(bool));
    data.Columns.Add(checkBoxColumn);

    checkBoxColumn.SetOrdinal(0); // Move column to the beginning
    foreach (DataRow row in data.Rows)
    {
        row["Select"] = false;

    }
    //to make all data uneditable except first
    foreach (DataColumn col in data.Columns)
    {
        if (col.ColumnName == "Select")
            col.ReadOnly = false;
        else
            col.ReadOnly = true;
    }
    data2.ItemsSource = data.DefaultView;
    checkBoxColumn.ReadOnly = false;
    data.RowChanged += ChangeEvent_RowChanged_wh;

, и вот мое событие изменения

    void ChangeEvent_RowChanged_wh(object sender, System.Data.DataRowChangeEventArgs e)
    {   
        //wh is a global arraylist
        var imei = e.Row["imei"];
        if (Convert.ToBoolean(e.Row["Select"]))
        {

            wh.Add(imei);
        }
        else
        {
            wh.Remove(imei);
        }

        int cr_c = wh.Count;
        wh_cr_bd.Badge = cr_c;
        lose_focus();
    }

, теперь посмотрите на эту картинку

enter image description here

этот значок вниз связан с количеством выборов, как упомянуто выше

теперь он показывает, что я проверил только 3, но на самом деле я проверил только 2, я исправляю это, нажимая снаружи Он программирует, но это неэффективно, особенно для потребителей, у кого-нибудь есть идеи, что я могу потерять фокус из всей сетки данных, не щелкая снаружи? я пытался:

    datagrid.Focus();

    datagrid.UnselectAll();

но без надежды

1 Ответ

0 голосов
/ 04 апреля 2020

Можно попробовать метод Keyboard.ClearFocus . Просто помните, что если вы используете Bindings с UpdateSourceTrigger=LostFocus, он может не обновлять их. (Однако это не похоже на ваш случай)

Если это не сработает, есть еще более продвинутый класс FocusManager . FocusManager.SetFocusedElement позволяет вам установить фокусировку на любой другой фокусируемый элемент. Это на самом деле ведет себя как нажатие снаружи.

...