c# - 验证取消 UpdateSourceTrigger 时如何调用 CanExecute

标签 c# wpf validation mvvm viewmodel

我正在使用 ValidationRuleTextBox在我看来,ValidationRule工作正常。

但是,当我处于 Command 的 canExecute 方法的状态时,就会出现问题。 (在 Button 上,在这种情况下)返回 true(Button 已启用),然后用户更改 TextBox 的内容所以ValidationRule返回错误 ValidationResult .这导致 ViewModel 属性绑定(bind)到 Button.Text没有被更新,这意味着 canExecute 方法仍然认为结果是好的并返回 true。

那么 - 尽管 ValidationResult 是错误的,我如何才能更新有问题的 ViewModel 属性?还是有另一种方法来做这一切?

编辑:这是我的 TextBox 的 XAML :

<TextBox HorizontalAlignment="Left" Margin="67,50,0,0" VerticalAlignment="Top" Width="27">
    <TextBox.Text>
        <Binding Path="MachineNo" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:MachineNoValidate/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

最佳答案

在进行了更多研究之后,该解决方案似乎正在实现 IDataErrorInfo我的 ViewModel 上的界面。然后我可以完全访问 TextBox 的当前内容通过绑定(bind)属性。

这是新的 XAML:

<TextBox HorizontalAlignment="Left" Margin="67,50,0,0" VerticalAlignment="Top" Width="27"
         Text="{Binding MachineNo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, 
         ValidatesOnDataErrors=True}"/>

仅限 this[]需要实现; WPF 不使用 Error属性(property)。

关于c# - 验证取消 UpdateSourceTrigger 时如何调用 CanExecute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34927858/

相关文章:

c# - 带有自定义数据模板的水平 ListView

c# - 通过 DataAnnotations 创建自定义验证?

php - 防止 WordPress 的默认输入清理

C# 将特定时区的 1 天添加到 DateTimeOffset

c# - WPF 非阻塞、自动关闭的消息框

c# - 检查数组是否包含无效值并返回 false?

c# - 我如何测试 Relaycommand?

javascript - Mesosphere 的 Meteor.js 验证

c# - 具体类型*可能*是一次性的时的多态性

c# - 将线程的上下文更改为其他用户