MVVM模式中ICommand在ViewModel中的应用
MVVM在wpf,sliverlight,window phone中开发中作用很不错,
最近学习了这个博友的文章,sliverlight中使用mvvm。
这个文章主要记录如何在ViewModel中使用ICommand
Icommand定义如下:
namespace System.Windows.Input
{
// 摘要:
// 为命令定义协定。
public interface ICommand
{
// 摘要:
// 当出现影响是否应执行该命令的更改时发生。
event EventHandler CanExecuteChanged;
// 摘要:
// 定义用于确定此命令是否可以在其当前状态下执行的方法。
//
// 参数:
// parameter:
// 此命令使用的数据。如果此命令不需要传递数据,则该对象可以设置为 null。
//
// 返回结果:
// 如果此命令可以执行,则为 true;否则为 false。
bool CanExecute(object parameter);
//
// 摘要:
// 定义在调用此命令时调用的方法。
//
// 参数:
// parameter:
// 此命令使用的数据。如果此命令不需要传递数据,则该对象可以设置为 null。
void Execute(object parameter);
}
}
自定义一个RelayCommand类,继承ICommand类
public class RelayCommand : ICommand
{
private Action _handler;
//Action是一个委托方法,所有的放到都可以传递进来,在Execute中执行。
public RelayCommand(Action handler)
{
this._handler = handler;
}
//如果返回false,绑定的控件就会呈现不可使用的效果
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
_handler();
}
}
定义ViewModel,使用ICommand
public class PersonViewModel
{
public List<Person> Human { get; set; }
public PersonViewModel()
{
Human = new Persons().getPerson();
}
private ICommand _testCommand;
public ICommand TestCommand
{
get
{
return _testCommand = new RelayCommand(TestMethod);//或者执行使用delegate方式写方法代码,不用传方法名
}
}
public void TestMethod()
{
MessageBox.Show("hello world");
}
}
在View页面简单的添加一个Button控件
<Button Name="btnTest" Content="Button Test" Command="{Binding TestCommand}"></Button>
在View页面的后置代码中
简单的实例化一个ViewModel
PersonViewModel personView = new PersonViewModel();
把当前页面的数据上下文和Viewmodel关联
this.DataContext = personView;
然后ViewModel和View就绑定好,ViewModel中的TestCommand命令就和页面上Button按钮绑定到了一起
运行模拟器,点击按钮就会执行TestCommand命令,弹出“hello world”对话框
如果控件没有Command属性,那么需要在后置代码中使用代码来绑定Command事件
如果CanExecute返回false,就会发现按钮控件呈现不可使用的灰色效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架