如何返回组合框中先前选择的条目?
How to go back to previously selected entry in a combobox?
在我的申请中有这样的要求:
在一个表单中有一个组合框和 4 个文本框。组合框始终包含值范围 1...10。根据在组合框中选择的值,我需要从数据库中读取与所选值对应的 4 个数据项,并将这些值显示在 4 个文本框中。因此对于组合框中的每个值,数据库中有 4 个值。
此外,用户可以通过编辑 4 个文本框中的值来更改这些值。
举个例子,假设组合框中当前选中的值为1,那么从数据库中读取记录1对应的数据,显示在4个文本框中。如果用户不编辑文本框中的任何值并选择条目 2(或除 1 以外的任何其他值),则从数据库中获取与新选择的值(即 2)对应的数据并显示在 4 个文本框中。但是,如果用户通过在四个可用文本框中的任何一个中键入来编辑任何值,那么在切换到新选择的条目(即 2.
之前,应将与记录 1 对应的那些新值保存到数据库中
为此,我在组合框的“SelectedIndexChanged 事件处理程序”中编写了一些代码。我在那里检查用户是否更改了任何值。如果是,我会提示用户保存数据。保存数据后,组合框将显示用户新选择的值,即 2(4 个文本框将显示与记录 2 对应的数据)。
所有上述功能都可以正常工作。但是还有一个额外的要求“如果对数据库的保存操作失败,那么组合框中的初始值应该与用户编辑的数据(在文本框中)一起显示,这意味着如果数据库写入失败我必须显示当前选择的值 1 而不切换到新选择的值 2".
在 SelectedIndexChanged 处理程序中,我尝试编写以下代码。
If (DatabaseWriteFails)
{
ComboBox->SelectedIndex = previous_value; (previous_value is 1 in our example)
}
但是上面的代码不起作用(我想是因为我们试图从 SelectedIndexChanged 处理程序本身更改选定的值)。当我们进入 SelectedIndexChanged 处理程序时,我可以看到 ComboBox->SelectedValue 已经更改为新选择的值,即 2.
问题是“一旦我们进入 SelectedIndexChanged 处理程序,我们如何才能返回到上一个条目”?任何帮助表示赞赏。谢谢。
首先,如果您更改事件中的 ComboBox 值,它将再次触发该事件,因此不要使用 SelectedIndexChanged,而应使用 SelectionChangeCommitted,它仅在用户更改 UI 中的所选项目时发生,不是以编程方式。
其次,您应该使用 SelectedItem 或 SelectedIndex 更改下拉列表,根据我的经验,SelectedValue 绑定不会更新 ComboBox。
如评论中所述,我对您的建议是使用绑定甚至 ReactiveUI。
在我的申请中有这样的要求:
在一个表单中有一个组合框和 4 个文本框。组合框始终包含值范围 1...10。根据在组合框中选择的值,我需要从数据库中读取与所选值对应的 4 个数据项,并将这些值显示在 4 个文本框中。因此对于组合框中的每个值,数据库中有 4 个值。
此外,用户可以通过编辑 4 个文本框中的值来更改这些值。
举个例子,假设组合框中当前选中的值为1,那么从数据库中读取记录1对应的数据,显示在4个文本框中。如果用户不编辑文本框中的任何值并选择条目 2(或除 1 以外的任何其他值),则从数据库中获取与新选择的值(即 2)对应的数据并显示在 4 个文本框中。但是,如果用户通过在四个可用文本框中的任何一个中键入来编辑任何值,那么在切换到新选择的条目(即 2.
之前,应将与记录 1 对应的那些新值保存到数据库中为此,我在组合框的“SelectedIndexChanged 事件处理程序”中编写了一些代码。我在那里检查用户是否更改了任何值。如果是,我会提示用户保存数据。保存数据后,组合框将显示用户新选择的值,即 2(4 个文本框将显示与记录 2 对应的数据)。 所有上述功能都可以正常工作。但是还有一个额外的要求“如果对数据库的保存操作失败,那么组合框中的初始值应该与用户编辑的数据(在文本框中)一起显示,这意味着如果数据库写入失败我必须显示当前选择的值 1 而不切换到新选择的值 2".
在 SelectedIndexChanged 处理程序中,我尝试编写以下代码。
If (DatabaseWriteFails)
{
ComboBox->SelectedIndex = previous_value; (previous_value is 1 in our example)
}
但是上面的代码不起作用(我想是因为我们试图从 SelectedIndexChanged 处理程序本身更改选定的值)。当我们进入 SelectedIndexChanged 处理程序时,我可以看到 ComboBox->SelectedValue 已经更改为新选择的值,即 2.
问题是“一旦我们进入 SelectedIndexChanged 处理程序,我们如何才能返回到上一个条目”?任何帮助表示赞赏。谢谢。
首先,如果您更改事件中的 ComboBox 值,它将再次触发该事件,因此不要使用 SelectedIndexChanged,而应使用 SelectionChangeCommitted,它仅在用户更改 UI 中的所选项目时发生,不是以编程方式。
其次,您应该使用 SelectedItem 或 SelectedIndex 更改下拉列表,根据我的经验,SelectedValue 绑定不会更新 ComboBox。
如评论中所述,我对您的建议是使用绑定甚至 ReactiveUI。