【问题标题】:In WPF how to Make Button enabled/disabled depending on the input of different TextBox Text property?在 WPF 中,如何根据不同 TextBox Text 属性的输入启用/禁用按钮?
【发布时间】:2016-01-02 23:30:57
【问题描述】:

如何使用 wpf 绑定根据不同 TextBox 文本属性的输入启用/禁用按钮?

相关问题:Make Button enabled/disabled depending on the TextBox Text property in WPF?

我看到了类似的这个问题,但是这个启用/禁用取决于一个 TextBox。

有什么方法可以将一个按钮启用/禁用与多个 TextBox 文本属性绑定?具体来说,需要根据包含 TextBox 列表的 ItemsControl 禁用/启用按钮吗?

【问题讨论】:

  • 你可以使用MultiBinding
  • @ckruczek 他没有不同的文本框,他有一个带有文本框的 itemsControl,不是一回事。
  • Google for MVVM,这对于 ViewModel 来说是非常常见且简单的工作。想法是为所有此类控件使用绑定(控件的嵌套列表?每个控件的数据模板和 ViewModel,然后父 ViewModel 只需访问 ViewModel 列表以检查值),然后如果更改了一个,则更新您的命令,这使得按钮启用/已禁用。

标签: c# wpf


【解决方案1】:

我想以 MVVM 的方式解决这个问题。

通常在使用 Button 时,您在 XAML 中设置 Command 属性...

<Button Command="{Binding MyCommand}" Content="Click Me"/>

在您的视图模型中,您有一个与之关联的ICommand

public class MyViewModel
{
    private ICommand _myCommand;
    public ICommand MyCommand
    {
        get
        {
            if (_myCommand== null)
            {
                _myCommand = new RelayCommand(
                    p => this.CanMyCommandExecute(),
                    p => this.MyCommandExecute()
            }
            return _myCommand;
        }
    }
}

您看到您在视图模型中创建了ICommand 实例,并在那里编写了CanExecute 方法的代码。 CanExecute 方法返回一个布尔值,它告诉命令是否能够在当前条件下执行。

WPF 将根据 CanExcute 方法返回true 还是false 自动禁用或启用与ICommand 连接的按钮。

在“CanExecute”方法中,您可以编写代码,将视图模型的其他几个绑定属性的值考虑在内,然后返回 true 或 false。

假设您的视图模型中有 3 个 TextBox 控件和 3 个绑定字符串值。 在 CanExecute 方法中,您检查这 3 个字符串属性的值并返回 true 或 false。 然后该按钮将相应地启用或禁用。

【讨论】:

  • 它不是动态变化的。在文本框中设置值后,需要点击某处,则只有启用禁用激活。
  • 在焦点改变之前不会触发文本框。
【解决方案2】:

您可以按照这些简单的步骤进行操作,我不想自己编写整个代码,但如果您觉得有困难,请随时询问:
1.根据链接的问题,将ElementName设置为ItemsControlName
2. 创建一个以value为控件的转换器。在 convert() 中,检查 ItemsControl(value) 的 Items 的条件并从 convert() 返回 disabled/Enabled(False/true)。
3.创建converter 的实例,并在Windows.Resources 中添加一个键。
4.将转换器添加到IsEnabled="{ElementName=ItemsControlName,Path={Binding},Converter={StaticResource convKey}}".
您可能会遇到一些语法错误,请更正并试一试。

【讨论】:

  • 我使用转换器进行了尝试,但是当我更改 ItemsControl 中的文本框时,它并没有更改按钮的启用禁用。当 itemcontrol 文本框中的值发生变化时,转换器没有调用。
猜你喜欢
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2021-04-09
  • 1970-01-01
相关资源
最近更新 更多