gpt4 book ai didi

c# - 在 View 模型中检索 IDataErrorInfo 字符串结果

转载 作者:行者123 更新时间:2023-12-03 10:55:11 26 4
gpt4 key购买 nike

我正在寻找如何从 ViewModel 的 IDataErrorInfo.this[string propertyName] 方法中获取字符串。

基本上,我在模型中创建了一个新属性,因此我可以验证模型集合中的每一行,并且在我的验证检查中,我会说它是否有效,如果不是,它将在我的 View 模型中禁用该命令

模型

   string IDataErrorInfo.this[string propertyName]
{
get
{
// Vaildation logic

if (result != string.Empty)
{
IsValid = false;
}
else
{
IsValid = true;
}

return result;
}

View 模型
    public bool CanSave
{
get
{
if (m_ProductVersion != null && m_ProductVersion.ProductItems != null)
{
foreach (ProductItem item in m_ProductVersion.ProductItems)
{
// I dont want to use isValid any more
if (!item.IsValid)
return false;
}
}

return true;
}
}

但是如果可以的话,我想摆脱 isValid 属性,并使用 View 模型中 IDataErrorInfo 的结果。

这可以做到吗?

谢谢

最佳答案

首先请注意,您的 IsValid无法正常工作。假设您有 3 个要验证的属性:A , BC . WPF 通常评估 IDataErrorInfo每当您输入某些内容时,想象一下我输入的内容对于 A 无效和 B .我得到一个错误和 IsValid将是 false .到现在为止还挺好。现在,我输入对 C 有效的内容. AB仍然无效,但 IsValid现在将是真的——因为最后一个 IDataErrorInfo检查产生了一个空的结果。

所以你的IsValid只检查最后一个被验证的属性,这对于一般的有效性检查来说绝对是不够的。

一处房产IsValid应该在返回结果之前对每个属性运行验证。像这样的东西:

public bool IsValid ()
{
for (string propertyName in allPropertyNames)
{
if (!string.IsEmptyOrNull(((IDataErrorInfo)this)[propertyName]))
return false;
}
return true;
}

您需要维护所有属性名称的列表,以便我们可以遍历它们。然后我们将验证委托(delegate)给 this[propertyName]调用 IDataErrorInfo验证。如果我们得到任何错误,则该对象无效。

因此,如您所见,您可以简单地调用 IDataErrorInfo 来替换单个属性检查。 item 属性,但您通常希望检查所有属性。

关于c# - 在 View 模型中检索 IDataErrorInfo 字符串结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23340561/

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