gpt4 book ai didi

c# - WPF 处理转换器错误和 View 模型验证

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:54 27 4
gpt4 key购买 nike

我有一个带有 INotifyDataErrorInfo 的 MVVM 应用程序,所有这些都已设置并正常运行。目前,我能够验证我的所有属性并阻止用户继续操作,直到所有错误都得到处理。一切都是阳光和玫瑰,直到最近我们意识到我们的一些控件(文本框和标签组合用于显示数字和单位类型,即 100mm)在删除/退格时没有显示红色错误装饰器。

控件上有一个转换器,它接收一个 double 值并将其格式化为一个字符串以显示在文本框中。我们在 convertback 方法中发现了一个问题,如果 convertback 未能将字符串转换回 double 值,它会发送 Binding.DoNothing。我们将其更改为 DependencyProperty.UnsetValue 并认为一切正常,但这发现了一个更大的问题。

我们现在遇到的问题是,viewmodel 没有收到转换器失败的通知,我不知道该怎么做。当用户删除文本框内容时,将使用空字符串调用转换器。该空字符串不会解析为 double 字符串。

我觉得我需要一种方法来通知 VM 转换失败,以便它可以将属性标记为 hasError。我看不出有什么办法可以做到这一点。这是 convertback 方法的代码。

        public object[] ConvertBack(object value, Type[] targetTypes, object           parameter, CultureInfo culture)
{
var strVal = value as string;
double dblVal = 0;
bool isSuccess = double.TryParse(strVal, out dblVal);

if (_systemUnits == SystemUnits.Metric && isSuccess)
{
return new[] { dblVal, Binding.DoNothing };
}
else if (_systemUnits != SystemUnits.Metric && isSuccess)
{
return new[] { Binding.DoNothing, dblVal };
}
else
{
return new[] { Binding.DoNothing, Binding.DoNothing };
}
}
}

我不确定其他哪些代码是相关的,但如果您认为有帮助,我愿意发布更多代码。谢谢你的时间!

最佳答案

I feel like I need a way to inform the VM

提供应用程序类的静态关闭,它具有相关 VM 的最新实例,并在转换器中访问该静态并直接调用它的方法/属性以通知状态。

-或者-

我建议您创建计算 属性,它与转换器的工作相同,以提供您提到的故障的估计值。

然后您就可以访问计算属性并执行您需要完成的过程。


这是一个示例属性 IsOverLimit,如果需要可以绑定(bind)它并通过其 INotifyPropertyChange 等检查状态...

public bool IsOverLimit { get { return ThreadCreationLimit > 120 } }

public uint ThreadCreationLimit
{
get { return _ThreadCreationLimit; }
set
{
_ThreadCreationLimit = value;
OnPropertyChanged("ThreadCreationLimit");
OnPropertyChanged("IsOverLimit");
}
}

关于c# - WPF 处理转换器错误和 View 模型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43008092/

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