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

来源:互联网 发布:淘宝店铺页头设计尺寸 编辑:程序博客网 时间:2024/06/18 11:14

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

场景

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

操作

  1. 我们可以把事件转化为命令
    • 引用System.Windows.Interactivity 在blend中带的有,vs2017引入mvvmlight会自动添加
    • 在xaml引入System.Windows.Interactivity。
         xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"          
  1. 在控件中可以这样使用
  <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>
  1. 在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的规则,代码实现功能那里都可以写,乱写一方便是不方便维护,另一方便执行的效率,你不懂后台的执行,可怕的就是乱写。用了最近的性能拿到了结果。这里写图片描述
    源码

我有时候会被别人说这个可以用什么什么可以很方便的实现,我当然知道,一个独立的功能实现难,但一般不是世界难题都可以解决,但是放在现有的系统中,如何是对现有系统最小更改和影响的情况下实现呢。为了一个功能更改太量的现有功能,那种方法我不认为是最优秀的。理解细节和整体把握就是最大的底气。我是码农,但我爱惜我自己的土地。

原创粉丝点击