Я пытаюсь сделать следующее: когда текстовое поле содержит значение «123», оно должно активировать кнопку и позволить мне щелкнуть ее.
Изображение решения & Просмотр изображения
Я не могу найти способ вызвать команду кнопки (класс SpecialCommand.cs), основанный на моих параметрах кнопки.Не могли бы вы поддержать, где я неправильно получаю этот шаблон MVVM?
WPF View [MainWindow.xaml]:
<Window.Resources>
<ViewModel:MainWindowVM x:Key="WindowVm"></ViewModel:MainWindowVM>
</Window.Resources>
<Grid>
<StackPanel>
<TextBox x:Name="textBox" Margin="0, 5" Text="123"/>
<Button Content="Click me!" Margin="0, 5" Command="{Binding SpecialCommand, Source={StaticResource WindowVm}}" CommandParameter="{Binding Text, ElementName=textBox, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StackPanel>
</Grid>
ViewModel [MainWindowVM.cs]:
public class MainWindowVM
{
private SpecialCommand _specialCommand;
public SpecialCommand SpecialCommand { get => _specialCommand; set => _specialCommand = value; }
public MainWindowVM()
{
_specialCommand = new SpecialCommand();
}
}
Command [SpecialCommand.cs]
public class SpecialCommand : ICommand
{
public bool CanExecute(object parameter)
{
if (parameter != null && (parameter as string) == "123")
return true;
return false;
}
public void Execute(object parameter)
{
MessageBox.Show("Button Pressed!");
}
public event EventHandler CanExecuteChanged;
}
Возможно, я ошибаюсь, поскольку кнопка и текстовое поле находятся в представлении. Мне не нужно добавлять или изменять какие-либо методы вмоя реализация SpecialCommand.Они должны иметь возможность видеть, когда свойство изменяется.Как и CanExecuteChanged () ниже, эта команда многократно вызывается и кажется излишней для этой небольшой задачи.
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}