我们在我们的应用程序中使用MVVM Pattern,我们有一个包含10个文本框的屏幕,每当他们在任何一个文本框中输入值时,其他人都应该被禁用。每当我输入值时,事件就会被触发,我可以禁用其他9个文本框。
这就是问题,当我删除/退格值时,事件不会被触发
示例:
假设每个文本框都有3个文本框 TB1,TB2,TB3 ,文本属性绑定就像文本=" {绑定 TextBox1 ,模式= TwoWay , UpdateSourceTrigger =的PropertyChanged }"对于TB1,......类似于其他Text BoxesTB2和TB3.So现在当我在UI中写一些东西 TB1 时,会为 TextBox1 属性触发Set事件禁用TB2和TB3。现在,当我在 TB1 中删除/退格单个数字/字符时,由于TextBox中没有值,因此未启用设置事件以启用其他2个文本框 TB1 即可。
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");
}
}
答案 0 :(得分:1)
要对文本值的任何更改启用更新(不必失去焦点),请将UpdateSourceTrigger标志添加到绑定。
<TextBox Text="{Binding MyTextProperty, UpdateSourceTrigger=PropertyChanged}" />