微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight实用窍门系列:63.Silverlight中的Command,自定义简单Command

    在Silverlight中的MVVM模式下将前台页面viewmodel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。

      CanExecute():判断是否继续执行操作。

      Execute():执行操作的内容

      CanExecuteChanged:当出现影响是否应执行该命令的更改时发生。

    首先:自定义一个btnCommand。

    public class btnCommand:ICommand

{
private bool canExe;
/// <summary>
/// 构造函数设置是否执行操作
/// </summary>
/// <param name="canexe"></param>
public btnCommand(bool canexe)
{
this.canExe = canexe;
}

/// <summary>
/// 判断是否执行操作
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
public bool CanExecute(object parameter)
{
if (canExe)
{
return true;
}
return false;
}

/// <summary>
/// 是否执行操作的变更发生时
/// </summary>
public event EventHandler CanExecuteChanged;

/// <summary>
/// 执行操作的内容,可以变为Action行为
/// </summary>
/// <param name="parameter"></param>
public void Execute(object parameter)
{
if (parameter != null)
{ MessageBox.Show(parameter.ToString()); }
else
{
MessageBox.Show("未设置CommandParameter");
}
}
}

    其次:定义一个viewmodel,并且在构造函数中初始化两个Command属性

    public class Btnviewmodel

{
// 设置两个命令
public ICommand BtnCommand { get; set; }
public ICommand BtnCommandTrue { get; set; }
public Btnviewmodel()
{
//初始化两个命令值
BtnCommand = new btnCommand(false);
BtnCommandTrue = new btnCommand(true);
}
}

    再次将viewmodel初始化为页面数据源

    <UserControl.DataContext>

<local:Btnviewmodel />
</UserControl.DataContext>

    最后:前台的两个按钮绑定Command

    <Grid x:Name="LayoutRoot" Background="White">

<Button Content="一个" Height="23" HorizontalAlignment="Left"
Command="{Binding BtnCommand}" CommandParameter="一个Command"
Margin="94,80,0" Name="button1" VerticalAlignment="Top" Width="75" />
<Button Command="{Binding BtnCommandTrue}" CommandParameter="第二个Command"
Content="第二个" Height="23" HorizontalAlignment="Left" Margin="94,140,0"
Name="button2" VerticalAlignment="Top" Width="75" />
</Grid>

    如需源码请点击 SLICommand.zip 下载,下面是效果图。有一个按钮CanExecute,有一个不能点击。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐