2015-10-06 1 views
0

Как сделать кнопку включенной/отключенной в зависимости от ввода другого свойства TextBox Text с использованием привязки wpf?В WPF как сделать кнопку включенной/отключенной в зависимости от ввода другого текстового свойства TextBox?

Связанный вопрос: Make Button enabled/disabled depending on the TextBox Text property in WPF?

Я видел этот вопрос похожего, но это включение/отключение зависит от одного TextBox.

Можно ли связать кнопку включения/отключения нескольких свойств текста TextBox? В частности, нужно отключить/включить кнопку на основе элемента ItemsControl, содержащего список TextBox?

+1

Вы можете использовать [MultiBinding] (https://msdn.microsoft.com/de-de/library/system.windows.data.multibinding (v = vs.110).aspx) – ckruczek

+0

http://stackoverflow.com/questions/6468160/make-button-enabled-disabled-depending-on-the-textbox-text-property-in-wpf – Vinoth

+0

@ckruczek у него нет разных текстовых полей, он имеет itemControl с textBoxes, не то же самое. –

ответ

1

Я хотел бы подойти к этой проблеме с помощью MVVM.

Обычно при работе с Button установить Command свойство в XAML ...

<Button Command="{Binding MyCommand}" Content="Click Me"/> 

и в вашей модели представления у вас есть ICommand, связанный с ним.

public class MyViewModel 
{ 
    private ICommand _myCommand; 
    public ICommand MyCommand 
    { 
     get 
     { 
      if (_myCommand== null) 
      { 
       _myCommand = new RelayCommand(
        p => this.CanMyCommandExecute(), 
        p => this.MyCommandExecute() 
      } 
      return _myCommand; 
     } 
    } 
} 

Вы видите, что вы создаете экземпляр ICommand в вашей модели представления и написать код для CanExecute метода там тоже. Метод CanExecute возвращает bool, который сообщает, может ли команда выполнить в текущих условиях.

WPF будет автоматически отключить или включить кнопку, связанную с ICommand в зависимости от того, возвращает ли метод CanExcute true или false.

В методе CanExecute вы можете написать код, который учитывает значения нескольких других связанных свойств вашей модели представления, а затем возвращает true из false.

Допустим, у вас есть 3 TextBox элементов управления и 3 строковых значения в вашей модели. В методе CanExecute вы проверяете значения этих трех свойств строк и возвращаете true или false. После этого кнопка будет включена или отключена.

+0

Это не динамически меняется. После установки значения в текстовом поле и необходимости щелкнуть где-нибудь, активируется только активизация включения. – vrnithinkumar

+0

Триггеры в текстовом поле происходят не до тех пор, пока изменения фокуса не будут изменены. – surfasb

1

Вы можете следовать этим простым шагам, я не хотел писать весь код самостоятельно, но не стесняйтесь спрашивать в случае, если вы затрудняетесь:
1. На основе связанного вопроса, установите ElementName как ItemsControlName ,
2. Создайте преобразователь, который принимает управление как value. В поле convert() проверьте условия на Элементы ItemsControl (значение) & возврат отключен/Включен (False/true) из convert().
3.Создайте экземпляр converter с ключом внутри Windows.Resources.
4. Добавьте преобразователь в IsEnabled="{ElementName=ItemsControlName,Path={Binding},Converter={StaticResource convKey}}".
Вы можете получить некоторые синтаксические ошибки, пожалуйста, исправьте их & дайте ему попробовать.

+0

Я пробовал его с помощью конвертера, но он не меняет разрешение на включение моей кнопки, когда я меняю текстовое поле в ItemsControl. конвертер не вызывается, а значения меняются внутри текстового поля itemcontrol. – vrnithinkumar

Смежные вопросы