按钮根据用户控件值更改禁用/启用
本文关键字:启用 用户 控件 按钮 | 更新日期: 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
。
您可以在
UserControl
的ViewModel
上创建一个事件。当按钮值发生更改时触发它。
因此,假设您拥有控制虚拟机。
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
根据您的需要修改您在事件上传递的详细信息