作用于两个控件的命令

时间:2012-02-27 21:25:32

标签: wpf routed-commands

查看标准的WPF命令,例如复制/粘贴,它们似乎都可以使用一个按钮并在文本框上操作。

我的问题:当我有一个按钮时如何使用命令,但我需要在两个单独的控件(文本框和组合框)中设置数据。如果用户在文本框中写入文本但未选择组合框值,则CanExecute应该失败。如果已设置组合框,则适用,但不适用于文本框。

在我的具体情况中,所有这些控件都包含在一个tabitem中。同样,我有另一个只有文本框和按钮的选项卡。我希望它具有与第一个选项卡相同的功能,除了不检查组合框值,它应检测到没有组合框并传入默认的“空对象”值。

Execute方法应该在我的viewmodel中调用一个方法,并从组合框和文本框中传入值。同样,每个选项卡应传递另一个唯一的静态值;我想我可以使用命令参数处理这个问题。

如何使这项工作?我是否创建了commandtarget的父选项卡,并在can / execute方法中直接引用其子控件?

1 个答案:

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