0

我们在我们的应用程序中使用 MVVM 模式,我们有一个带有 10 个文本框的屏幕,每当他们在任何一个文本框中输入值时,其他的应该被禁用。每当我输入值时,事件就会被触发,我可以禁用其他 9 个文本框。

问题来了,当我删除/退格值时,事件不会被触发

示例:
假设我有 3 个文本框TB1、TB2、TB3 ,每个文本框的文本属性绑定类似于 Text="{Binding TextBox1 ,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }" 对于 TB1,...类似于其他文本框 TB2 和 TB3。所以现在当我在TB1的 UI 中写一些东西时,会为TextBox1属性触发 Set 事件,我正在禁用 TB2 和 TB3。现在,当我在TB1中删除/退格单个数字/字符时,Set由于 TextBox TB1中没有值,因此未触发启用其他 2 个文本框的事件。

View : 

<StackPanel orintation = "Horizontal" Margin = "20,0,20,0">
<TextBox Text = {Binding TextBox1,Mode = TwoWay, UpdateSourceTrigger = PropertyChanged} IsEnbaled={Binding IsTextBox1Enabled}>
<TextBox Text = {Binding TextBox2,Mode = TwoWay, UpdateSourceTrigger = PropertyChanged} IsEnbaled={Binding IsTextBox2Enabled}>
<TextBox Text = {Binding TextBox3,Mode = TwoWay, UpdateSourceTrigger = PropertyChanged} IsEnbaled={Binding IsTextBox3Enabled}>
</StackPanel>

ViewModel:

private bool _isTextBox1Enabled = true;
private bool _isTextBox2Enabled = true;
private bool _isTextBox3Enabled = true;

/// Encapsulating Above 3 _isTextBoxEnabled Properties  

private string _textBox1;
private String _textBox2;
private string _textbox3;

Public String TextBox1
{
    get { Return _textBox1;}
    set 
    {
        _textBox1 = value;
        if (TextBox1 > 0)
        {
            _isTextBox2Enabled  = false;
            _isTextBox3Enabled  = false;
        }   
        else
        {
            _isTextBox2Enabled  = true;
            _isTextBox3Enabled  = true;
        }           
        NotifyPropertyChanged("TextBox1");
    }
}

Public String TextBox2
{
    get { Return _textBox2;}
    set 
    {
        _textBox2 = value;
        if (TextBox2 > 0)
        {
            _isTextBox1Enabled  = false;
            _isTextBox3Enabled  = false;
        }   
        else
        {
            _isTextBox1Enabled  = true;
            _isTextBox3Enabled  = true;
        }           
        NotifyPropertyChanged("TextBox2");
    }
}

Public String TextBox3
{
    get { Return _textBox3;}
    set 
    {
        _textBox3 = value;
        if (TextBox3 > 0)
        {
            _isTextBox2Enabled  = false;
            _isTextBox1Enabled  = false;
        }   
        else
        {
            _isTextBox2Enabled  = true;
            _isTextBox1Enabled  = true;
        }       
        NotifyPropertyChanged("TextBox3");
    }
}
4

1 回答 1

1

要启用对文本值的任何更改的更新(不必失去焦点),请将 UpdateSourceTrigger 标志添加到绑定中。

<TextBox Text="{Binding MyTextProperty, UpdateSourceTrigger=PropertyChanged}" />
于 2013-06-03T07:28:06.103 回答