按钮根据用户控件值更改禁用/启用

本文关键字:启用 用户 控件 按钮 | 更新日期: 2023-09-27 18:34:36

我有一个用户控件,它有 3 个文本框和一个组合框。我在我的主页中多次添加这些用户控件(例如 5 次(。我在主页上有一个按钮,如果这些文本框值中的任何一个更改或组合框选择更改(5 * 3 = 15个文本框和5 * 1 = 5个组合框(,则应启用/禁用该按钮。

我正在使用 MVVM,所以我将所有这些控件绑定到属性。有人可以帮助我知道我如何实现这一目标吗?如何根据启用/禁用我的按钮捕获对文本框或组合框的任何更改的事件?

按钮根据用户控件值更改禁用/启用

有时有点痛苦,但这是一个很好的用例 CanExecute/CanExecuteChanged .

按钮的 Command 属性应绑定到ICommand对象。该类可能应该只在其构造函数中获取ViewModel的实例,以便它可以检查CanExecute中的所有适当字段。

然后,您需要在该命令对象上添加一个 RaiseCanExecuteChanged 函数,以便在设置相关变量时可以调用它。该函数仅引发 CanExceuteChanged 事件,因此按钮将重新调用CanExecute并更新其 IsEnabled 属性。

或者,您可以只在按钮上绑定IsEnabled,并在相关字段更改时更新绑定bool

您可以在

UserControlViewModel上创建一个事件。当按钮值发生更改时触发它。

因此,假设您拥有控制虚拟机。

public class MyControlViewModel
{
    public event EventHandler OnTextboxOrComboBoxChanged;
    private string _myTextBoxValue;
    public string MyTextBoxValue
    {
        get { return _myTextBoxValue; }
        set 
        { 
            _myTextBoxValue = value; 
            OnPropertyChanged("MyTextBoxValue");
            if(OnTextboxOrComboBoxChanged != null)
                OnTextboxOrComboBoxChanged(); // trigger the event
        }
    }
    // other codes here
}

现在在按钮所在的视图模型上。创建事件的订阅,并添加要在按钮上绑定的IsEnabled属性。

public class MainViewModel
{
    public MainViewModel
    {
        MyControlViewModel = new MyControlViewModel();
        MyControlViewModel.OnTextboxOrComboBoxChanged += (sender, e) =>
        {
            IsButtonEnabled = false;
            // add other process here
        };
    }
    public bool IsButtonEnabled { get; set; }
    public MyControlViewModel MyControlViewModel { get; set; }
}

现在这只是一个代码模型,通过创建自己的EventArgs根据您的需要修改您在事件上传递的详细信息