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

时间:2014-12-18 01:34:53

标签: c# wpf mvvm

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

我正在使用MVVM,所以我将所有这些控件绑定到属性。有人能帮助我知道我怎么能做到这一点?如何捕获事件以对文本框或组合框进行任何更改并基于启用/禁用我的按钮?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

您可以在ViewModel的{​​{1}}上创建活动。当按钮值发生变化时触发它。

所以,让我们说你有你的控制VM。

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; } }

,根据您的需要修改您在活动中传递的详细信息