[英]MVVM WPF Button Command Binding - RelayCommand
抱歉,如果这是一个愚蠢的问题,但我似乎无法解决,基本上,我在窗口上有一个用于保存数据的按钮。 我已经添加了一个RelayCommand类,如这里提到的(最佳答案) 绑定按钮单击方法。每次我运行项目时,都会命中ICommand SaveCommand方法。 从这里开始,它创建了一个循环并不断循环。 但是,当窗口出现时,按“保存”按钮实际上并不会导致ICommand SaveCommand方法被点击。 我该如何解决? 感谢大家。
我的观点:
<av:Button x:Name="btnSave" Content="Save" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="81" Height="44" Margin="52,0,0,20" av:Grid.RowSpan="2" Command ="{Binding SaveCommand}"/>
我的ViewModel:
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private ICommand _saveCommand;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(
param => this.SaveObject(),
param => this.CanSave()
);
}
return _saveCommand;
}
}
private bool CanSave()
{
// Verify command can be executed here
return true;
}
private void SaveObject()
{
// Save command execution logic
}
RelayCommand类别:
public class RelayCommand : ICommand
{
#region Fields
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
#endregion // Fields
#region Constructors
/// <summary>
/// Creates a new command that can always execute.
/// </summary>
/// <param name="execute">The execution logic.</param>
public RelayCommand(Action<object> execute)
: this(execute, null)
{
}
/// <summary>
/// Creates a new command.
/// </summary>
/// <param name="execute">The execution logic.</param>
/// <param name="canExecute">The execution status logic.</param>
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
#endregion // Constructors
#region ICommand Members
[DebuggerStepThrough]
public bool CanExecute(object parameters)
{
return _canExecute == null ? true : _canExecute(parameters);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameters)
{
_execute(parameters);
}
#endregion // ICommand Members
}
您在SaveCommand
的get
部分中SaveCommand
了错误/输入错误,应该进行更改
if (_saveCommand != null)
到if (_saveCommand == null)
您的CanSave方法返回false。
考虑解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.