从数据网格 WPF 中的单元格中删除焦点

Remove focus from cell in datagrid WPF

我有简单的数据网格

    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();
    }

现在看那张照片

这个向下的徽章与上面提到的选择数量相关联

现在它显示我只检查了 3 个,但实际上我只检查了 2 个,我通过在他的程序外单击来修复它,但这不是有效的,特别是对于消费者来说,任何人都知道我会失去对所有人的关注没有点击外部的数据网格?我试过了:

    datagrid.Focus();

    datagrid.UnselectAll();

但没有希望

你可以试试 Keyboard.ClearFocus method。请记住,如果您将 BindingsUpdateSourceTrigger=LostFocus 一起使用,它可能不会更新它们。 (但这似乎不是你的情况)

不行的话还有更高级的classFocusManagerFocusManager.SetFocusedElement 允许您将焦点设置到任何其他可聚焦元素。它实际上就像在外面点击一样。