查看标准的WPF命令,例如复制/粘贴,它们似乎都可以使用一个按钮并在文本框上操作。
我的问题:当我有一个按钮时如何使用命令,但我需要在两个单独的控件(文本框和组合框)中设置数据。如果用户在文本框中写入文本但未选择组合框值,则CanExecute应该失败。如果已设置组合框,则适用,但不适用于文本框。
在我的具体情况中,所有这些控件都包含在一个tabitem中。同样,我有另一个只有文本框和按钮的选项卡。我希望它具有与第一个选项卡相同的功能,除了不检查组合框值,它应检测到没有组合框并传入默认的“空对象”值。
Execute方法应该在我的viewmodel中调用一个方法,并从组合框和文本框中传入值。同样,每个选项卡应传递另一个唯一的静态值;我想我可以使用命令参数处理这个问题。
如何使这项工作?我是否创建了commandtarget的父选项卡,并在can / execute方法中直接引用其子控件?
答案 0 :(得分:0)
您需要实现CanExecute方法,该方法检查TextBox数据绑定值和ComboBox.SelectedItem数据绑定值。
以你的问题为例。
您的TextBox.Text应该与您的ViewModel数据绑定 以及你的ComboBox。 所以你的ViewModel应该有两个属性:
public string TextBoxCurrentText {get { ...}set {...}}
public string ComboBoxCurrentSelected {get { ...}set {...}}
然后在两个Setter中,您将执行YourCommmand.RaiseCanExecuteChanged();
因此它将执行您的CanExecute代码片段以确定您的Button可以单击。 可以是:
bool YourCommandCanExecute()
{
//Just example
if (!string.IsNullOrEmpty(TextBoxCurrentText) && !string.IsNullOrEmpty(ComboBoxCurrentSelected))
return true;
return false;
}