4

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

所以这是我的问题,每当我在 TextBox1 中输入一些文本时,TextBox1 的 Setter 就会被触发,并且我能够检查是否存在循环、值是否存在以及我正在禁用其他文本框。现在,当文本框中有单个值说“9”并且我正在删除/退格时,不会触发 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}/>

查看型号:

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");
   }
}
4

2 回答 2

9

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

public bool IsEnabled1
{
    get { return _isEnabled1; }

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

        _isEnabled1 = value;
        RaisePropertyChanged("IsEnabled1");
    }
}

然后在 xaml 中:

<TextBox Text="{Binding TextBox1, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
         IsEnabled="{Binding IsEnabled1}" />

等等与其他文本框

于 2013-06-05T07:42:28.460 回答
1

首先,如果您将 updatesourcetrigger 设置为 Propertychanged - 当您在文本框中执行任何操作时会调用您的 setter。我在一个简单的测试项目中检查了这一点。顺便说一句,您是否在您的设置器中调用 OnPropertyChanged,因为它不在您的示例代码中?

如果不是,您的绑定似乎已损坏。所以请检查您的绑定或发布一些更相关的代码。

编辑:

如果您将类型更改为int?您可以执行以下 xaml

    <TextBox Text="{Binding MyNullableInt, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, TargetNullValue=''}"/>
于 2013-06-05T07:41:41.797 回答