Команды, которые действуют на два элемента управления - PullRequest
1 голос
/ 28 февраля 2012

Просматривая стандартные команды WPF, такие как копирование / вставка, кажется, что все они работают с помощью одной кнопки и действуют на текстовое поле.

Мой вопрос: как использовать команды, когда у меня есть одна кнопка,но мне нужно, чтобы данные были установлены в двух отдельных элементах управления (текстовое поле и поле со списком).Если пользователь написал текст в текстовом поле, но не выбрал значение поля со списком, CanExecute должен завершиться ошибкой.Это применимо, если задан комбобокс, но не текстовое поле.

В моем случае, в частности, все эти элементы управления заключены в табит.Кроме того, у меня есть еще одна вкладка только с текстовым полем и кнопкой.Я хочу, чтобы он имел ту же функциональность, что и первая вкладка, за исключением того, что вместо проверки значения в поле со списком он должен обнаружить, что в нем нет поля со списком, и вместо этого передать значение по умолчанию «нулевой объект».

Метод execute должен вызвать метод в моей viewmodel и передать значения из выпадающего списка и текстового поля.Кроме того, каждая вкладка должна передавать другое уникальное статическое значение;Я думаю, что я могу справиться с этим, используя параметр команды.

Как мне сделать эту работу?Сделать родительскую вкладку, в которой указана команда targettt, и напрямую ссылаться на дочерние элементы управления в методах can / execute?

1 Ответ

0 голосов
/ 28 февраля 2012

Вам необходимо реализовать метод CanExecute, который проверяет как значение привязки данных TextBox, так и значение привязки данных ComboBox.SelectedItem.

Возьмите пример из вашего вопроса.

Ваш TextBox.Text должен быть привязан к вашей ViewModel А также ваш ComboBox. Таким образом, ваша ViewModel должна иметь два свойства:

public string TextBoxCurrentText {get { ...}set {...}}
public string ComboBoxCurrentSelected {get { ...}set {...}}

Тогда в обоих сеттерах вы бы сделали YourCommmand.RaiseCanExecuteChanged();

Таким образом, он выполнит ваш фрагмент кода CanExecute, чтобы определить, можно ли нажать кнопку. Который может быть:

    bool YourCommandCanExecute()
    {
//Just example
        if (!string.IsNullOrEmpty(TextBoxCurrentText) && !string.IsNullOrEmpty(ComboBoxCurrentSelected))
            return true;
         return false;
    }
...