zoukankan      html  css  js  c++  java
  • WPF Caliburn 学习笔记(一)Action 续

    上次的笔记,主要讲的Action。这次讨论下Action的其他两个行为。

    AsyncAction

    AsyncAction(异步行为)

    基于上次的笔记内容,我们在此基础上加一个3秒的时间延迟

           [Preview("CanDivide")]
           public int Divide(int left,int right)
           {
               Thread.Sleep(3000);
               return left / right;
           }
    
           public bool CanDivide(int left,int right)
           {
               return right != 0;
           }
    
    当我们输入数字,点button后,这时我们拖动窗体,发现窗体不能动,因为现在还在执行中。

    我们只要在Divide函数上加个特性就行了。

    代码

    现在我们点button后,可以拖动窗体了吧,这里Button按过后不能按咯,发现了没,估计正在执行那个函数吧。

    这里它相当于多线程一样,不会影响UI的操作。

    我们还可以对结果产生些变化。比如我们 12 / 2得到的是6.可我想要600。

    那我们可以加一个CallBack在AsyncAction特性中

     

    代码

    结果等到600,这里先执行完Divide(int left,int right) 后调用Result(int result) 。

    image

    DependentActions

    在前面我们通过控件的Name来对它进行操作的,现在我们试下依赖属性的行为。

    在Calculator.cs类中。

    代码


    这里我们定义了三个属性,分别实现了OnPropertyChanged,也就是Calculator.cs类要实现INotifyPropertyChanged接口

    来触发属性值的改变。

    [Dependencies("Left","Right")]这个特性不要忘了加哦~~ 。

    具体为什么要加这个属性,把这个问题先记下来。

    我们再看.xaml页面

    代码

    在Text上绑定了相应的属性。

    可以按F5运行了。

    开始:

    image
    输入后:

    image

    分母输入0,按钮不能按了:

    image

    问题记录:

    关于特性(attribute)的运用,这方面不太清楚。

    附代码

  • 相关阅读:
    设计模式之六大设计原则学习笔记
    java多线程学习笔记
    mac上安装mongodb数据库教程
    在mac下使用终端命令通过ssh协议连接远程linux系统,代替windows的putty
    从request对象中获取请求json格式的参数
    @Conditional注释
    lambda 根据实体类的拼音排序
    PHP一行代码获取时间戳
    PHP导出生成Excel文件
    Mysql merge引擎介绍
  • 原文地址:https://www.cnblogs.com/dingli/p/1977797.html
Copyright © 2011-2022 走看看