我的视图中有一些用于输入字段的文本框和一个“保存”按钮。其中两个 TextBoxes 是保存的必填字段,我在 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 的预期行为,还是我缺少某些东西或某处出现故障?如果是前者,有没有办法覆盖这种行为?如果从未将空字符串传递到绑定属性,我无法阻止在 ViewModel 中保存。