gpt4 book ai didi

c# - 验证与焦点丢失

转载 作者:行者123 更新时间:2023-11-30 18:28:11 29 4
gpt4 key购买 nike

我们正在构建一个新的应用程序,其中一个要求是“没有保存按钮”。因此,每次更改属性都会被保存。为了减少数据库事务的数量,我们只想在失去焦点后保存 TextBox 文本。

我们的问题是验证,我们通常使用这样的东西:

[Required(AllowEmptyStrings = false, ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "This is not valid email address")]
public string UserEmail
{
get { return userEmail; }

[DebuggerNonUserCode]
set
{
Validator.ValidateProperty(value, new ValidationContext(this, null, null)
{ MemberName = "UserEmail" }
);

userEmail = value;
NotifyOfPropertyChange(() => UserEmail);
}
}

这只是为了

   binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

但在新的解决方案中——我们只想在文本框失去焦点时输入“UserEmail”属性的 setter 。但是验证呢?它应该在每次按键时起作用,如何实现?

最佳答案

您可能想看看 System.Windows.Interactivity.WPF库,其中包括一个作为附加行为的“交互”类。它允许您基本上订阅您需要订阅的任何事件。这将允许您通过绑定(bind)“对属性更改”进行验证,就像您现在所做的那样,然后在输入字段失去焦点时执行实际的数据库调用。对于文本框,这可能类似于:

<TextBox Text="{Binding TextField, UpdateSourceTrigger=PropertyChanged}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus">
<i:EventTrigger.Actions>
<i:InvokeCommandAction Command="{Binding SaveCommand}"/>
</i:EventTrigger.Actions>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>

因此,从本质上讲,您从属性的实际“ setter ”中“分离”了您的保存调用。也许是这样的:

    private string textField;
public string TextField
{
get { return textField; }
set
{
if (value == textField) return;
textField = value;
OnPropertyChanged();
}
}

private ICommand saveCommand;

public ICommand SaveCommand
{
get { return saveCommand ?? (saveCommand = new DelegateCommand(Save)); }
}

private void Save()
{
// Do your DB transactions here.
}

关于c# - 验证与焦点丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25481583/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com