gpt4 book ai didi

c# - ValidationRule 失败时属性绑定(bind)不更新

转载 作者:太空狗 更新时间:2023-10-29 22:22:22 25 4
gpt4 key购买 nike

在我的 View 中,我有几个用于输入字段的文本框和一个“保存”按钮。其中两个文本框是保存的必填字段,我在 xaml 中设置了自定义 ValidationRule 以获得一些视觉反馈(红色边框和工具提示),如下所示:

<TextBox ToolTip="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}">
<TextBox.Text>
<Binding Path="ScriptFileMap" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<v:MinimumStringLengthRule MinimumLength="1" ErrorMessage="Map is required for saving." />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>

“保存”按钮链接到调用 SaveScript() 函数的 DelegateCommand。如果两个必填字段的属性为空,则该函数不允许用户保存:

public void SaveScript()
{
if (this.ScriptFileName.Length > 0 && this.ScriptFileMap.Length > 0)
{
// save function logic
}
}

但是,该功能仍然允许保存文件。仔细检查后,我发现当 ValidationRule 失败时,这两个字段(ScriptFileName 和 ScriptFileMap)的值没有更新,而是使用最后一个已知值。

这是 ValidationRule 的预期行为,还是我缺少某些东西或某处出现故障?如果是前者,有没有办法覆盖该行为?如果从未将空字符串传递到绑定(bind)属性,我无法阻止在 ViewModel 中进行保存。

最佳答案

是的,这是预期的行为。默认情况下,验证规则在原始建议值上运行,即在转换并写回绑定(bind)源之前的值。

尝试将规则中的 ValidationStep 更改为 UpdatedValue。这应该会强制规则在转换并写回新值后运行。

关于c# - ValidationRule 失败时属性绑定(bind)不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26513390/

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