Command的定义和应用
来源:互联网 发布:爱情动作片软件 编辑:程序博客网 时间:2024/05/18 18:45
一、Command的定义
1)自定的Command都要实现这个接口
二、Command的应用
public interface ICommand
{
//当出现影响是否应执行该命令的更改时发生。
event EventHandler CanExecuteChanged;
//定义用于确定此命令是否可以在其当前状态下执行的方法。
bool CanExecute(object parameter);
//定义在调用此命令时调用的方法。
void Execute(object parameter);
}
2)定义命令
public class SettingCommand :ICommand
{
private event Action method;//这里定义了命令的执行逻辑,是命令最关键的地方
public SettingCommand(Action action)
{
this.method = action;
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
//这里把command的逻辑以事件的形式对外公布
//是为了把代码逻辑和业务分开
if (method != null)
method();
}
}
3)定义命令的集合体
public class ItemViewModel
{
private SettingCommand editPlan;//编辑
private SettingCommand deletePlan;//删除
private SettingCommand showPlan;//浏览
public event Action<string> OnEditClicked;
public event Action<string> OnDeleteClicked;
public event Action<string> OnShowClicked;
public SettingCommand ShowPlan
{
get
{
if (showPlan == null)
showPlan = new SettingCommand(Show);
return showPlan;
}
}
public SettingCommand EditPlan
{
get
{
if (editPlan == null)
editPlan = new SettingCommand(Edit);
return editPlan;
}
}
public SettingCommand DeletePlan
{
get
{
if (deletePlan == null)
deletePlan = new SettingCommand(Delete);
return deletePlan;
}
}
private void Show()
{
if (OnShowClicked != null)
OnShowClicked(id);
}
private void Edit()
{
if (OnEditClicked != null)
OnEditClicked(id);
}
private void Delete()
{
if (OnDeleteClicked != null)
OnDeleteClicked(id);
}
}
4)实例化一个命令集合
ItemViewModel ivm = new ItemViewModel();
ivm.OnShowClicked += (id) => { Show(id); } //浏览
ivm.OnEditClicked += (id) => { Edit(id); } //编辑
ivm.OnDeleteClicked += (id) => { Delete(id); } //删除
像平板电脑的菜单那样,展开菜单的时候,上面有查看、编辑、删除几个按钮。在WPF里面,一个按钮就搞定了,不过要花点功夫把按钮模板改写一下。改写模板,在模板里面放多三个按钮。然后实例化一个命令集合实体,把里面的command跟模板里面的按钮一一对应上就好了。
1)按钮模板
<ControlTemplate x:Key="ctChoose" TargetType="RadioButton">
<Border x:Name="bg" Height="40" BorderBrush="Transparent" BorderThickness="1" Opacity="0.6" Background="Transparent">
<Grid Height="40">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<Button Grid.ColumnSpan="5" x:Name="btn" Content="{TemplateBinding Content}" />
<Button Grid.Column="1" x:Name="btnShow" Opacity="0" Command="{Binding ShowPlan}" Margin="3" />
<Button Grid.Column="2" x:Name="btnEdit" Opacity="0" Command="{Binding EditPlan}" Margin="3" />
<Button Grid.Column="3" x:Name="btnDel" Opacity="0" Command="{Binding DeletePlan}" Margin="3" />
</Grid>
</Border>
</ControlTemplate>
2)应用模板<RadioButton x:Name="radioButton" Content="名字不是很长不是很长" Template={StaticResource ctChoose} />
3)实例化一个命令集合实体,把它指定给radioButton作为DataContext就行了。
代码可以去这里下载:http://download.csdn.net/detail/so_lazy/6657379
如果你看了,欢迎给建议。
0 0
- Command的定义和应用
- j2me的form和command的应用
- 指针的定义和应用
- 注解的定义和应用
- 定义自己的rm command
- SOP的定义和企业应用
- Android Style样式的定义和应用
- 共用体的定义和应用【C++】
- 枚举类型的定义和应用
- 实型变量的定义和应用
- 位向量/位图的定义和应用
- [Android]toolbar的定义和应用
- Ado中Command的应用
- GCC定义和应用
- 定义和样式应用
- nohub command & 和 nohub command 的区别
- Android应用模块之间的交互方式和接口定义
- C++中关于模板的定义和应用
- 依赖项属性
- 关于委托,事件和方法
- 形状和图形-类型结构
- Slider模板定义
- 简单的转化器
- Command的定义和应用
- ScrollBar模板定义
- DB2笔记 说道说道
- 101个硬币中有一个假币,有一个无砝码的天平,称两次,判断假币比真币重还是轻。
- WPF控件状态的过渡效果
- java-----逻辑运算符
- s3c2440的Nand flash裸机程序
- 导航控制器UINavigationController
- linux下vi编译器的使用