Мы используем шаблон MVVM в нашем приложении, у нас был экран с 10 текстовыми полями, когда они вводили значение в любом текстовом поле, другие должны быть отключены. Всякий раз, когда я ввожу значение, событие срабатывает, и я могу отключить другие 9 текстовых полей.Отключение текстовых полей, зависящих от значений текстовых полей, используя MVVM?
здесь возникает проблема, событие не уволят, когда я удалить/Backspace значение
Пример:
Скажем у меня есть 3 Текстовые поля ТВ1, ТВ2, ТВ3 для каждого из них Текстовые поля Связывание текстового свойства подобно тексту = «{Связывание TextBox1, Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}« Для TB1, ... аналогично другим текстовым блокамTB2 и TB3.Так теперь, когда я пишу что-то в UI в TB1 Событие Set - это огонь d для TextBox1 Свойство, и я отключу TB2 и TB3. Теперь, когда i Delete/Backspace Single Number/Char в TB1 Событие настройки не запускается для включения других 2 текстовых полей, поскольку нет значения в TextBox 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");
}
}
LostFocus кажется лучшим подходом, но я сомневаюсь в этом дизайне, потому что вы отключите пользователя от табуляции до/фокусировки следующего текстового поля. –
Lost Focus будет работать, но требование похоже на то, как и когда пользователь вводит другие текстовые поля, необходимо отключить/Включить на основе того, существует ли значение или пусто. – Ujjwal27
Не могли бы вы описать, как это должно работать? Мне непонятно, когда именно текстовые файлы должны быть включены/отключены. Возможно, привязка между свойством Enabled каждого текстового поля и свойствами ViewModel может сделать трюк. –