验证取消UpdateSourceTrigger时如何调用CanExecute
How to call CanExecute when validation cancels UpdateSourceTrigger
我在视图中的 TextBox
上使用 ValidationRule
,ValidationRule
工作正常。
但是,当我处于 Command
的 canExecute 方法(在本例中为 Button
)返回真值(启用 Button
),然后用户更改了 TextBox
的内容,因此 ValidationRule
returns 变成了错误的 ValidationResult
。这导致绑定到 Button.Text
的 ViewModel 属性 未更新,这意味着 canExecute 方法仍然认为结果良好并且 returns 为真。
那么 - 我怎样才能让有问题的 ViewModel 属性 更新,尽管 ValidationResult
是错误的?还是有另一种方法来做这一切?
编辑:这是我的 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>
经过更多研究,解决方案似乎是在我的 ViewModel 上实现 IDataErrorInfo
接口。然后我可以通过绑定 属性 完全访问 TextBox
的当前内容。
这是新的 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
属性.
我在视图中的 TextBox
上使用 ValidationRule
,ValidationRule
工作正常。
但是,当我处于 Command
的 canExecute 方法(在本例中为 Button
)返回真值(启用 Button
),然后用户更改了 TextBox
的内容,因此 ValidationRule
returns 变成了错误的 ValidationResult
。这导致绑定到 Button.Text
的 ViewModel 属性 未更新,这意味着 canExecute 方法仍然认为结果良好并且 returns 为真。
那么 - 我怎样才能让有问题的 ViewModel 属性 更新,尽管 ValidationResult
是错误的?还是有另一种方法来做这一切?
编辑:这是我的 TextBox
:
<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>
经过更多研究,解决方案似乎是在我的 ViewModel 上实现 IDataErrorInfo
接口。然后我可以通过绑定 属性 完全访问 TextBox
的当前内容。
这是新的 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
属性.