如何在 WPF 中的删除操作之前启用文本框并等待输入条件
Posted
技术标签:
【中文标题】如何在 WPF 中的删除操作之前启用文本框并等待输入条件【英文标题】:How to enable a textbox and wait for criteria to be entered before delete operation in WPF 【发布时间】:2021-04-06 08:09:08 【问题描述】:我无法从我的节目中删除记录。我有一个文本框,默认情况下它被绑定到我的 ViewModel 的布尔属性的 ReadOnly 属性禁用。文本框允许用户输入 ID 作为要删除的记录的标准。我的视图模型中有删除代码,该代码假设在第一次单击删除按钮时启用文本框,并等待用户在文本框中输入 ID,然后第二次单击删除按钮执行删除手术。但相反,代码没有按预期工作,代码启用文本框并在单击删除按钮时在用户不输入 ID 的情况下运行删除操作。问题总结是,当用户点击删除按钮时,整个删除代码块都会运行,甚至不允许用户输入要删除的记录的ID。请问如何使代码启用ID文本框并等待用户输入ID并第二次单击删除按钮以进行删除操作? 这是代码:
private RelayCommand deleteCommand;
public RelayCommand DeleteCommand
get return deleteCommand;
public void Delete()
MessageBoxResult result = MessageBox.Show("Are you sure you want to delete this record?", "Delete Operation", MessageBoxButton.YesNo, MessageBoxImage.Question,MessageBoxResult.No);
if(result == MessageBoxResult.No)
return;
else
try
IDEnabled = false;
var IsDeleted = ObjStudentService.Delete(NewStudent.Id);
if (!IsDeleted)
MessageBox.Show("Student Record Deleted", "Delete Operation", MessageBoxButton.OK, MessageBoxImage.Information);
LoadData();
NewStudent.Id = 0;
else
MessageBox.Show("Unable to Delete Record, ensure you enter the correct ID.", "Delete Operation", MessageBoxButton.OK, MessageBoxImage.Information);
catch (Exception ex)
MessageBox.Show(ex.Message, "Exception Found", MessageBoxButton.OK, MessageBoxImage.Error);
“IDEnabled”是禁用 ID 文本框字段的 ReadOnly 属性的属性,以便用户可以输入要删除的特定记录的 ID。
我在构造函数中调用代码如下:
public StudentViewModel()
ObjStudentService = new StudentService();
LoadData();
NewStudent = new Student();
deleteCommand = new RelayCommand(Delete);
这是我在 XAML 中对删除按钮的绑定:
<Button x:Name="BtnDelete" Margin="10 0 0 0" IsTabStop="False"
IsEnabled="Binding Path=ButtonEnabled"
Style="StaticResource MaterialDesignRaisedAccentButton"
ToolTip="Delete record"
Command="Binding Path=DeleteCommand"
Width="75">
Delete
</Button>
请有人帮我看看我的代码,看看我哪里出错了。
【问题讨论】:
【参考方案1】:当用户单击删除按钮时,您可以检测文本框何时启用或未启用。如果文本框被禁用,启用它以便用户可以输入 ID。如果文本框已启用,请验证输入,禁用文本框,然后开始删除操作。
public void Delete()
if (!IDEnabled) //assuming that if true, the textbox is no longer ReadOnly
IDEnabled = true; //enable the textbox
else
//validate the ID
IDEnabled = false; //disable the textbox
//delete the record
var IsDeleted = ObjStudentService.Delete(NewStudent.Id);
【讨论】:
我仍在努力理解您的代码。 第一次单击按钮时,文本框被禁用 (IDEnabled = false
),因此您启用它以允许用户键入。第二次单击按钮时,文本框已启用,因此您验证文本框的输入,删除记录并禁用文本框。通过禁用文本框,一切都会被重置。
如果他在“if”块中的条件评估为真,这意味着“else”块中不会发生删除操作。
@DaPlug 是的。那将解决您的问题,即“当用户单击删除按钮时,整个删除代码块都会运行,甚至不允许用户输入要删除的记录的 ID。”。 “if”块将切换 IDEnabled 标志,以便下次按下按钮时,“else”块将评估为 true。
非常感谢,它工作得很好。以上是关于如何在 WPF 中的删除操作之前启用文本框并等待输入条件的主要内容,如果未能解决你的问题,请参考以下文章