gpt4 book ai didi

c# - WPF/Caliburn.Micro - 使用 IDataErrorInfo 进行输入验证

转载 作者:行者123 更新时间:2023-12-03 10:35:14 30 4
gpt4 key购买 nike

我的 WPF 应用程序中有以下代码,我正在尝试实现输入验证。

模型:

public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}

View 模型:
public class CustomerViewModel : Screen, IDataErrorInfo
{
private Customer _customer;
public Customer Customer
{
get { return _customer; }
set
{
if (_customer != value)
{
_customer = value;
NotifyOfPropertyChange(() => Customer);
}
}
}

public string Error
{
get
{
throw new NotImplementedException();
}
}

public string this[string columnName]
{
get
{
string result = null;
if (columnName == "Name")
{
if (string.IsNullOrEmpty(Customer.Name))
result = "Please enter a Name";
if (Customer.Name.Length < 3)
result = "Name is too short";
}
return result;
}
}
}

看法:
<TextBox Text="{Binding Customer.Name, UpdateSourceTrigger=LostFocus, ValidatesOnDataErrors=true, NotifyOnValidationError=true}"/>

问题:
该解决方案未按预期工作。在文本框中键入数据时没有任何 react 。我不确定我是否采取了正确的步骤。

任何人都可以帮助我吗?

最佳答案

我认为问题的发生是因为没有 Name View 模型中的属性(但在 Customer 类中)。
您在绑定(bind)中使用嵌套属性 Customer.Name .

我没有将它与 IDataErrorInfo 结合使用验证。

目前,您查看模型索引器中的这种情况不会受到影响:

if (columnName == "Name")
{
...
}

因为索引器永远不会被调用。

我的建议

添加 Name属性到您的 View 模型,它将代表客户名称。
然后,您可以使用客户类(如设置)初始化您的 View 模型
Name = customer.Name

在 View 模型构造函数中。

您的绑定(bind)需要更改为
<TextBox Text="{Binding Name  ....

这样做之后,索引器应该可以工作了,因为现在有一个 Name View 模型中的属性。

也许还有另一种解决方案可以让您保持当前的嵌套绑定(bind)( Customer.Name ),但我不确定这一点。

关于c# - WPF/Caliburn.Micro - 使用 IDataErrorInfo 进行输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33523847/

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