无法在WPF中使用MVVM禁用控件(TextBoxes)?

Ujj*_*l27 4 wpf mvvm wpf-controls

我有一个文本框,取决于我需要启用/禁用其他文本框的文本框值.我正在使用MVVM模式.

所以这是我的问题,每当我在TextBox1中输入一些文本时,TextBox1的Setter就会被触发,我能够检查是否循环,是否存在valus,我正在禁用其他文本框.现在,当文本框中有单个值说"9"并且我正在删除/ Backspacing它时,Set事件不会被触发以启用其他文本框.

视图:

<TextBox Text = {Binding TextBox1 , UpdateSourceTrigger = PropertyChanged,Mode= TwoWay}/>
<TextBox Text = {Binding TextBox2 , UpdateSourceTrigger = PropertyChanged,Mode= TwoWay}/>
<TextBox Text = {Binding TextBox3 , UpdateSourceTrigger = PropertyChanged,Mode= TwoWay}/>
Run Code Online (Sandbox Code Playgroud)

查看型号:

private int_textBox1;
public int TextBox1
{
 get {return _textBox1;}
 set 
   {
     _textBox1= value;
     if(value > 0)
       {
          //Code for Disabling Other Text Boxes (TextBox2 and TextBox3)
       }
      else
       {
          // Code for Enabling Other Text Boxes (TextBox2 and TextBox3)
       }
     NotifyPropertyChanged("TextBox1");
   }
}
Run Code Online (Sandbox Code Playgroud)

stu*_*bax 9

如果您正在使用MVVM模式,则应创建布尔属性,并将TextBox.IsEnabled属性绑定到它.您的布尔属性应该引发PropertyChanged事件,以便告诉视图(在您的情况下为TextBox)您的属性确实已更改:

public bool IsEnabled1
{
    get { return _isEnabled1; }

    set
    {
        if (_isEnabled1 == value)
        {
            return;
        }

        _isEnabled1 = value;
        RaisePropertyChanged("IsEnabled1");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在xaml中:

<TextBox Text="{Binding TextBox1, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
         IsEnabled="{Binding IsEnabled1}" />
Run Code Online (Sandbox Code Playgroud)

和其他TextBoxes一样