【问题标题】:Enable/disable textbox based on checkbox selection in WPF using MVVM使用 MVVM 根据 WPF 中的复选框选择启用/禁用文本框
【发布时间】:2011-06-02 20:04:22
【问题描述】:

我有一个包含多达 40 个文本框的 WPF 表单,每个文本框都有一个复选框。每个文本框都应根据其相应复选框的值启用/禁用。我已经看到了可以使用 ICommand 来实现此目的的解决方案,但是如何在没有 40 个 ICommand 实现的情况下处理 40 个单独的案例?

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    只需将TextBoxIsEnabled 属性绑定到CheckBoxIsChecked 属性即可:

    <CheckBox Name="checkBox1" />
    <TextBox IsEnabled="{Binding ElementName=checkBox1, Path=IsChecked}" />
    

    【讨论】:

    • 是的,我只是在发布问题后尝试了这个。这对我有用。只是我试图避免命名每个复选框以实现纯 MVVM,但我认为我必须破例。谢谢。
    • 我同意。不要通过 MVVM 执行此操作。这个启用/禁用是一个纯粹的用户界面设计决策,与应用程序的底层数据无关。
    • @Prakash:是什么让您认为命名复选框不是“纯”MVVM? MVVM 中没有任何内容表明您不应该为 UI 项命名...
    • @Thomas True。理想的 MVVM 实现不会有任何数据绑定控件的名称。我意识到我可以为复选框命名,因为它们没有绑定到任何数据。我需要的是纯 UI 功能。
    • @Mark,你可以这样做:gist.github.com/thomaslevesque/3713bed71a486d02858a,将CheckBox.IsChecked绑定到IsTextBoxDisabled,将TextBox.IsEnabled绑定到IsTextBoxEnabled
    【解决方案2】:

    如果您有 40 个这样的控件,我将创建一个包含复选框和文本框的新控件。您可以使用该新控件而无需实现 40 个命令,而您的新控件具有单个命令实现。这也是需要维护的更少代码,作为额外的好处

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2014-10-01
      相关资源
      最近更新 更多