В моем приложении WPF у меня есть текстовое поле и кнопка. Кнопка имеет команду привязки к команде, которая будет что-то делать с текстом.Изменение пользовательского интерфейса из команд - использование привязки команд в WPF
<TextBox x:Name="_textBox"></TextBox>
<Button Command="{Binding SomeCommand}"
CommandParameter="{Binding ElementName=_text, Path=Text}"
Content="Trigger SomeCommand" />
Теперь я хочу, чтобы нажатие кнопки также очистило TextBox. Каков наилучший способ сделать это? Я вижу два варианта:
Я также могу добавить событие Click на кнопку Button - это очистит текст. Это не кажется мне хорошей идеей, поскольку я бы разложил действие в двух местах, полагаясь на порядок, который они выполняли, чтобы быть правильным.
Опцией, которую я использовал сейчас, является передача всего TextBox вместо свойства TextBox.Text. При этом команда может сначала извлечь текст, использовать его, а затем очистить TextBox. Мои связывании то же самое, но без «Путь»:
<TextBox x:Name="_textBox"></TextBox>
<Button Command="{Binding SomeCommand}"
CommandParameter="{Binding ElementName=_text}"
Content="Trigger SomeCommand" />
И основных частей моей команды:
public class SomeCommand : ICommand
{
....
public void Execute(object parameter)
var textBox = parameter as TextBox;
if (inputTextBox == null) return;
DoSomething(textBox.Text);
textBox.Clear();
}
}
Моя проблема состоит в том, что команда теперь полагается на компонент пользовательского интерфейса, и что пользовательский интерфейс зависит от команды, чтобы на самом деле внести некоторые изменения в нее. Мне не все в порядке с этим. Есть ли способ лучше?
Я использую шаблон MVVM, и кажется, что вы правы. Я бы привязал текстовое поле к некоторому свойству того же ViewModel, которое содержит команду, которая должна очистить его. Я считаю, что это звучит разумно. Завтра будет ближе. Благодаря! – stiank81
Пожалуйста, сделайте, я уверен, что это вам поможет. –
Ты абсолютно прав. Не делал это точно так же, как предлагалось, но по существу я сохраняю значение в ViewModel и заставляю команду использовать значение, хранящееся в ViewModel, а затем очищать его. Благодаря! – stiank81