PDA

View Full Version : دلیل نحوه نوشتن رویداد command در relaycommand



سیدسبحان
سه شنبه 11 خرداد 1395, 09:27 صبح
سلام
وقت بخیر
ما اگه بخایم یه command رو پیاده سازی کنیم، اینطوری عمل میکنیم:



public class NormalCommand : ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
throw new NotImplementedException();
}
public void Execute(object parameter)
{
throw new NotImplementedException();
}
}




ولی برای الگوی mvvm، ما نمیتونیم که برای هر متدی، یک کلاس اینطوری بنویسیم.
لذا یک کلاس relaycommand میسازیم و همیشه ازش استفاده میکنیم.



public class RelayCommand : ICommand
{
private Action<object> execute;
private Func<object, bool> canExecute;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return this.canExecute == null || this.canExecute(parameter);
}
public void Execute(object parameter)
{
this.execute(parameter);
}
}



ولی سوالی که برای من پیش اومده و هنوز نتونستم جوابم رو پیدا کنم ، این هست که چرا رویداد command رو در relaycommand اینطوری مینویسه؟




public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}



راستش با add و remove آشنایی ندارم.
همچنین با کدهایی که در این دو بلاک نوشته.
پیشاپیش ممنون بابت گذاشن وقت