您的位置:首页 > 其它

[MVVM]04-MVVMLight不支持命令的控件把事件转换成命令

2017-11-25 22:55 246 查看

MVVMLight不支持命令的控件把事件转换成命令

场景

checkbox不支持命令,但是要在选中在时候在ViewModel中进行相应的操作,那么要怎么实现呢

操作

我们可以把事件转化为命令

引用System.Windows.Interactivity 在blend中带的有,vs2017引入mvvmlight会自动添加

在xaml引入System.Windows.Interactivity。

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"


在控件中可以这样使用

<CheckBox Width="30" Height="30" Margin="86,65,401,65">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<command:EventToCommand Command="{Binding CheckedCommand}"></command:EventToCommand>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<command:EventToCommand Command="{Binding UnCheckedCommand}"></command:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>


在ViewlModel添加对应的事件处理弹框

CheckedCommand = new RelayCommand(Checked);

UnCheckedCommand = new RelayCommand(UnChecked);
public RelayCommand CheckedCommand
{
get;
set;
}

public RelayCommand UnCheckedCommand
{
get;
set;
}

private void Checked()
{
MessageBox.Show("Checked");
}

private void UnChecked()
{
MessageBox.Show("Unchecked");
}


提示

命令可以很好的添加快捷键的后面的文会讲到。WPF内部在的优化特别是最新的一版更新中有明显的改进

如果不到万不得一的情况下一定遵守MVVM的规则,代码实现功能那里都可以写,乱写一方便是不方便维护,另一方便执行的效率,你不懂后台的执行,可怕的就是乱写。用了最近的性能拿到了结果。


源码

我有时候会被别人说这个可以用什么什么可以很方便的实现,我当然知道,一个独立的功能实现难,但一般不是世界难题都可以解决,但是放在现有的系统中,如何是对现有系统最小更改和影响的情况下实现呢。为了一个功能更改太量的现有功能,那种方法我不认为是最优秀的。理解细节和整体把握就是最大的底气。我是码农,但我爱惜我自己的土地。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息