神不在的星期二
准备基础代码 1 创建一个ViewModelBase publicabstractclassViewModelBase:INotifyPropertyChanged{ //属性改变事件 publiceventPropertyChangedEventHandlerPropertyChanged; //当属性改变的时候,调用该方法来发起一个消息,通知View中绑定了propertyName的元素做出调整 publicvoidRaisePropertyChanged(stringpropertyName) { PropertyChangedEventHandlerhandler=PropertyChanged; if(handler!=null) { handler(this,newPropertyChangedEventArgs(propertyName)); } } } 2 创建一个DelegateCommand publicclassDelegateCommand:ICommand{ readonlyAction_execute; readonlyPredicate_canExecute; publicDelegateCommand(Actionexecute) :this(execute,null) { } publicDelegateCommand(Actionexecute,PredicatecanExecute) { if(execute==null) thrownewArgumentNullException("execute"); _execute=execute; _canExecute=canExecute; } publicvoidExecute(objectparameter) { _execute(parameter); } publicboolCanExecute(objectparameter) { return_canExecute==null?true:_canExecute(parameter); } publiceventEventHandlerCanExecuteChanged { add{CommandManager.RequerySuggested+=value;} remove{CommandManager.RequerySuggested-=value;} } } END 创建示例用ViewModel 让ViewModel继承自ViewModelBase。 publicclassMainWindowViewModel:ViewModelBase{ privatestring_input; publicstringInput { get { return_input; } set { _input=value; RaisePropertyChanged("Input"); } } privatestring_display; publicstringDisplay { get { return_display; } set { _display=value; RaisePropertyChanged("Display"); } } publicDelegateCommandSetTextCommand{get;set;} privatevoidSetText(objectobj) { Display=Input; } publicMainWindowViewModel() { SetTextCommand=newDelegateCommand(newAction(SetText)); } } END 创建View 最少只需要三个控件:一个textbox拿来做输入,一个label拿来做输出,一个button拿来提交数据。 END 绑定View和ViewModel 当View和ViewModel都已经创建完之后,最后一步就是把它哥俩绑定在一起了。这样,当View改变的时候,ViewModel就会发生相应的改变,反之亦然。