文本框中的数据无效 - 如何禁用我的命令按钮?

发布于 2024-11-15 02:50:39 字数 641 浏览 4 评论 0原文

基本上我有以下情况:

<TextBox Text="{Binding MyIntValue}" />
<Button prism:Click.Command={Binding MyCommand}" />
public Boolean CanDoCommand()
{
    return (MyIntValue < 100);
}

public void DoCommand() { ... }

所以这就是问题,如果我输入 25 的值,MyCommand 就会启用。之后,如果我将其更改为 25A,按钮仍处于启用状态,因为绑定未更新以反映 ViewModel 中的错误。相反,我的视图上只有一个绑定错误。这使得 MyCommand 按钮处于启用状态,而 MyIntValue 仍为 25。

即使我的 ViewModel 正确,如何根据任何绑定问题禁用该按钮?

编辑(发帖者真正要求的内容):

如何禁用按钮 CanExecute 方法返回的内容 从基于 View 的 ViewModel 有绑定错误吗?

Basically I have the following situation:

<TextBox Text="{Binding MyIntValue}" />
<Button prism:Click.Command={Binding MyCommand}" />
public Boolean CanDoCommand()
{
    return (MyIntValue < 100);
}

public void DoCommand() { ... }

So here's the problem, if I type in the value of 25 the MyCommand becomes enabled. Afterwards, if I change it to 25A the Button is still enabled because the binding was not updated to reflect an error in my ViewModel. Instead, I only have an binding error on my View. This leaves the MyCommand button enabled and the MyIntValue still at 25.

How can I disable the button based on having any binding issues even if my ViewModel is proper?

Edit (What the poster is truly asking for):

How can I disable a button regardless
of what the CanExecute method returns
from the ViewModel based upon the View
having a BindingError?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

有深☉意 2024-11-22 02:50:39
<Button prism:Click.Command={Binding MyCommand, 
    UpdateSourceTrigger=PropertyChanged}" /> 
<Button prism:Click.Command={Binding MyCommand, 
    UpdateSourceTrigger=PropertyChanged}" /> 
月竹挽风 2024-11-22 02:50:39

当 MyIntValue 更改时,您必须引发命令的可执行更改事件。

You must raise the command's can execute changed event when MyIntValue changes.

新人笑 2024-11-22 02:50:39

如果您的 MyIntValue 属性是 int 类型,则当您的输入为 25A 时,您的绑定将永远不会更新。

解决此问题的唯一方法是在 VM 端使用字符串类型和 IDataErrorInfo。

另一种方法是使用 typeof Nullable int 和转换器,并在该值不是您期望的值时将其设置为 null。

编辑:

即使我的 ViewModel 正确,如何根据任何绑定问题禁用该按钮?

您的问题是您的虚拟机和用户界面不同步。如果你输入 25A,你的虚拟机看起来是正确的,因为它仍然有 25,但你的视图有一个 BindingError。所以你的问题应该是我如何同步我的视图和视图模型。 (请参阅我的两个建议)

编辑:
另一种解决方案是防止错误输入。因此 Masked 或 RegexTextbox 行为也应该有效。

if your MyIntValue property is type of int your binding will never update when your input is 25A.

ony way to solve this is to use type of string and IDataErrorInfo on VM side.

another way is to use typeof Nullable int and a converter and set the value to null when its not what you expect.

EDIT:

How can I disable the button based on having any binding issues even if my ViewModel is proper?

your problem is that your VM and your UI is not in sync. if you type 25A your Vm seems right because it still has the 25, but your View has an BindingError. so your question should be how can i sync my view and viewmodel. (see my two suggestions)

EDIT:
another solution would be to prevent wrong input. so a Masked or RegexTextbox behavior should also work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文