INotifyPropertyChanged接口的实现
internal class NotifyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
//属性变化时间通知
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
//使用堆栈跟踪找寻属性名调用属性变化
protected void RaisePropertyChanged()
{
var stack = new StackTrace();
var lastFrame = stack.GetFrame(1);
var methodName = lastFrame.GetMethod().Name;
OnPropertyChanged(methodName);
}
}
ICommand接口的简单实现
public class RelayCommand : ICommand
{
// 通知命令能不能执行
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
//判断命令能不能执行
public bool CanExecute(object parameter)
{
return true;
}
//当命令执行的时候执行什么事情
public void Execute(object parameter)
{
if (ExcutedAction == null)
{
return;
}
ExcutedAction();
}
//下面是类的构造函数和传进来命令执行时候调用的委托
public Action ExcutedAction { get; set; }
public Func<object,bool> CanExcutedFunc { get; set; }
public RelayCommand(Action action)
{
ExcutedAction = action;
}
}