精华内容
下载资源
问答
  • Binding在WPF的使用

    2019-10-03 20:15:49
    在我们印象,Binding的意思是“绑定”,这个“绑”大概Bind这个单词吧,这么理解的话就是以音译英了,没什么实际意义。 Bind这个单词的动词形式是Binding,看看字典就知道除了前面说的“捆绑”之外,还有...

    闲来无事,不想打DOTA,在这里小小研究下wpf中关于Binding的东西。

    咯咯


    在我们印象中,Binding的意思是“绑定”,这个“绑”大概取自于Bind这个单词吧,这么理解的话就是以音译英了,没什么实际意义。

    Bind这个单词的动词形式是Binding,看看字典就知道除了前面说的“捆绑”之外,还有“键联”,“关联”的意思。比如原子键联(atomic binding),化学键联(binding-beam)等。也就是说啦,Binding更注重于表达的是一种“关系”,而不是一个动作。如果把Binding比作数据的桥梁,那么它的两端分别是Binding的源(Source)和目标(Target)。它描述了数据从哪来到哪去,一般情况下Binding的源是逻辑层的对象,目标是表现层(UI)的控件对象,我们不但可以控制源与目标之间双向或者单向的道路,还可以控制对数据的放行机制。那么下面我来搞一个简单的例子。

    先做一个源数据,一个来自于逻辑层的对象

    class Student
    {
      private string name;
      public string Name
      {
         get{return name;}
         set{name = value;}
      }
    }

    属性是有了,可是我的目标完全不知道当我的属性发生变化时,源怎么通知我的目标,告诉它源数据变化了?所以,这样一个简单的类显然不科学。完善一下它,让它去继承

    System.ComponentModel下的INotifyPropertyChanged接口就行了

    那么完整的类应该是这个样子

    class Student:INotifyPropertyChanged
    {
      public event PropertyChangedEventHandler PropertyChanged;
      private string name;
      public string Name
      {
         get{return name;}
         set{
             name = value;
             //在set中激发 PropertyChanged事件
             if(this.PropertyChanged!=null)
               {
                 this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));
               }
            }
      }
    }

    看,当为Binding设置了数据源之后,它会自动监听来自PropertyChanged这个接口的事件,Name发生变化,触发propertyChanged事件,Binding监听到了触发的事件,它会告诉UI层的控件Name这个属性的值发生变化,通知UI层控件显示新的值。

    有卖就有买,下面是它的目标控件

    <Window x:Class="Binding1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <StackPanel>
            <TextBox x:Name="txtBoxName" BorderBrush="Black" Margin="5"></TextBox>
            <Button Content="AddAge" Margin="5" Click="Button_Click"></Button>
        </StackPanel>
    </Window>

    写了一个TextBox作为Binding的目标和一个按钮Button来触发改变Name值得事件。

    然后就是介绍他们俩认识的时候了。。。

    public partial class MainWindow : Window
        {
            Student stu;
            public MainWindow()
            {
                InitializeComponent();
    
                //准备数据源
                stu = new Student();
                //把stu.Name作为Binding的数据源
                Binding binding = new Binding();
                binding.Source = stu;
                binding.Path = new PropertyPath("Name");
                //使用Binding连接源和目标,把stu的Name属性值联系到一个叫做"txtBoxName"的TextBox上去
                BindingOperations.SetBinding(this.txtBoxName, TextBox.TextProperty, binding);
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                stu.Name += "屎兔子";
            }
        }

    运行效果

    当然,也可以把上面的代码这么写,借助Binding类构造器和C#3.0的对象初始化语法来简化代码

    public Window1()
    {
       InitializeComponent();
    this.txtBoxName.SetBinding(TextBox.TextProperty,new Binding("Name"){Source = stu = new Student()}); }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
                stu.Name += "屎兔子";
    }

    好了,一个简单的例子写到这里,明天继续详细学习。(下午下午媳妇一直问我那个疯狂猜图的答案,表示我也迷恋了,去玩会儿~)

     

     

    转载于:https://www.cnblogs.com/Mushrooms/p/3142559.html

    展开全文
  • 之前组内同学问我耦合的关系,我没给对方讲清楚,今天借这个机会来深入讲讲模块之间的耦合关系这个事情。本文将用图文详细讲解七...耦合是软件结构各模块之间相互连接的一种度量,耦合强弱模块间接口的复杂...

    之前组内同学问我耦合的关系,我没给对方讲清楚,今天借这个机会来深入讲讲模块之间的耦合关系这个事情。

    本文将用图文详细讲解七种耦合的不同之处。

    高内聚与低耦合

    高内聚与低耦合是每个软件开发者追求的目标,那么内聚和耦合分别是什么意思呢?

    内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。

    耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。

    耦合

    不同模块之间的关系就是耦合,根据耦合程度可以分为7种,耦合度依次变低。内容耦合

    公共耦合

    外部耦合

    控制耦合

    标记耦合

    数据耦合

    非直接耦合

    下面我们来说说每种耦合是什么,开始之前先来说下要实现的功能。m1和m2是两个独立的模块,其中m2种会显示m1的输入,m1会显示m2的输入。

    很显然,m1和m2两个模块之间会有一些联系(耦合),你也可以想想如何实现这个功能,下面用7种不同的方式来实现这个功能。

    注:项目的代码我放到了github,项目的demo,可以在这里查看。

    内容耦合

    内容耦合是最紧的耦合程度,一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。

    为了实现功能,我们将m1的输入放到m2.m1input上,将m2的输入放到m1.m2input上。

    // m1.js

    root.m2.m1input = this.value;

    m2.update();

    // m2.js

    root.m1.m2input = this.value;

    m1.update();

    PS:不知道谁会这么写代码,除了我为了做演示之外。。。

    公共耦合

    一组模块都访问同一个全局数据结构,则称之为公共耦合。

    在这种case中,m1和m2将自己的输入放到全局的data上。

    // m1.js

    root.data.m1input = this.value;

    m2.update();

    // m2.js

    root.data.m2input = this.value;

    m1.update();

    外部耦合

    一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合。外部耦合和公共耦合很像,区别就是一个是简单变量,一个是复杂数据结构。

    在这种case中,m1和m2都将自己的输入放到全局上。

    // m1.js

    root.m1input = this.value;

    m2.update();

    // m2.js

    root.m2input = this.value;

    m1.update();

    控制耦合

    模块之间传递的不是数据信息,而是控制信息例如标志、开关量等,一个模块控制了另一个模块的功能。

    从控制耦合开始,模块的数据就放在自己内部了,不同模块之间通过接口互相调用。

    在这个case中,得增加一个需求,就是当m1的输入为空时,隐藏m2的显示信息。

    // m1.js

    root.m1input = this.value;

    m2.update();

    m2.toggle(!!this.value); // 传递flag

    上面的代码中m1直接控制了m2的显示和隐藏。

    标记耦合

    调用模块和被调用模块之间传递数据结构而不是简单数据,同时也称作特征耦合。

    在这个case中,m1传给m2的是一个对象。

    // m1.js

    me.m1input = this.value;

    m2.update(me); // 传递引用

    // m2.js

    me.m2input = this.value;

    m1.update(me);

    数据耦合

    调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递。

    在这个case中,m1传给m2的是一个简单数据结构。

    // m1.js

    me.m1input = this.value;

    m2.update(me.m1input); // 传递值

    // m2.js

    me.m2input = this.value;

    m1.update(me.m2input);

    非直接耦合

    两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。

    子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。

    在这个case种,增加一个index.js作为主模块。

    // index.js

    var m1 = root.m1;

    var m2 = root.m2;

    m1.init(function (str) {

    m2.update(str);

    });

    m2.init(function (str) {

    m1.update(str);

    });

    // m1.js

    me.m1input = this.value;

    inputcb(me.m1input); // inputcb是回调函数

    // m2.js

    me.m2input = this.value;

    inputcb(me.m2input);

    内聚

    其实关于内聚也分为很多种,如下所示,如果你感兴趣可以自己研究研究,我们下次再来分享内聚的问题。偶然内聚

    逻辑内聚

    时间内聚

    通信内聚

    顺序内聚

    功能内聚

    总结

    希望你看完上面的文章,搞懂了耦合的种类,也希望你以后能使用非直接耦合这种方式来写代码,祝好。

    展开全文
  • 代码的耦合性

    2019-05-05 20:49:00
    之前组内同学问我耦合的关系,我没给对方讲清楚,今天借这个机会来深入讲讲模块之间的耦合关系这个事情。 本文将用图文详细讲解七种耦合的...耦合是软件结构各模块之间相互连接的一种度量,耦合强弱模块间...

    之前组内同学问我耦合的关系,我没给对方讲清楚,今天借这个机会来深入讲讲模块之间的耦合关系这个事情。

    本文将用图文详细讲解七种耦合的不同之处。

    高内聚与低耦合
    高内聚与低耦合是每个软件开发者追求的目标,那么内聚和耦合分别是什么意思呢?

    内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。

    耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。

    耦合
    不同模块之间的关系就是耦合,根据耦合程度可以分为7种,耦合度依次变低。

    内容耦合
    公共耦合
    外部耦合
    控制耦合
    标记耦合
    数据耦合
    非直接耦合
    下面我们来说说每种耦合是什么,开始之前先来说下要实现的功能。m1和m2是两个独立的模块,其中m2种会显示m1的输入,m1会显示m2的输入。

    很显然,m1和m2两个模块之间会有一些联系(耦合),你也可以想想如何实现这个功能,下面用7种不同的方式来实现这个功能。

    注:项目的代码我放到了github,项目的demo,可以在这里查看。

    内容耦合
    内容耦合是最紧的耦合程度,一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。

    为了实现功能,我们将m1的输入放到m2.m1input上,将m2的输入放到m1.m2input上。

    // m1.js
    root.m2.m1input = this.value;
    m2.update();

    // m2.js
    root.m1.m2input = this.value;
    m1.update();
    PS:不知道谁会这么写代码,除了我为了做演示之外。。。

    查看完整代码和demo。

    公共耦合
    一组模块都访问同一个全局数据结构,则称之为公共耦合。

    在这种case中,m1和m2将自己的输入放到全局的data上。

    // m1.js
    root.data.m1input = this.value;
    m2.update();

    // m2.js
    root.data.m2input = this.value;
    m1.update();
    查看完整代码和demo。

    外部耦合
    一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合。外部耦合和公共耦合很像,区别就是一个是简单变量,一个是复杂数据结构。

    在这种case中,m1和m2都将自己的输入放到全局上。

    // m1.js
    root.m1input = this.value;
    m2.update();

    // m2.js
    root.m2input = this.value;
    m1.update();
    查看完整代码和demo。

    控制耦合
    模块之间传递的不是数据信息,而是控制信息例如标志、开关量等,一个模块控制了另一个模块的功能。

    从控制耦合开始,模块的数据就放在自己内部了,不同模块之间通过接口互相调用。

    在这个case中,得增加一个需求,就是当m1的输入为空时,隐藏m2的显示信息。

    // m1.js
    root.m1input = this.value;
    m2.update();

    m2.toggle(!!this.value); // 传递flag
    上面的代码中m1直接控制了m2的显示和隐藏。

    查看完整代码和demo。

    标记耦合
    调用模块和被调用模块之间传递数据结构而不是简单数据,同时也称作特征耦合。

    在这个case中,m1传给m2的是一个对象。

    // m1.js
    me.m1input = this.value;
    m2.update(me); // 传递引用

    // m2.js
    me.m2input = this.value;
    m1.update(me);
    查看完整代码和demo。

    数据耦合
    调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递。

    在这个case中,m1传给m2的是一个简单数据结构。

    // m1.js
    me.m1input = this.value;
    m2.update(me.m1input); // 传递值

    // m2.js
    me.m2input = this.value;
    m1.update(me.m2input);
    查看完整代码和demo。

    非直接耦合
    两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。

    子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。

    在这个case种,增加一个index.js作为主模块。

    // index.js
    var m1 = root.m1;
    var m2 = root.m2;

    m1.init(function (str) {
    m2.update(str);
    });

    m2.init(function (str) {
    m1.update(str);
    });

    // m1.js
    me.m1input = this.value;
    inputcb(me.m1input); // inputcb是回调函数

    // m2.js
    me.m2input = this.value;
    inputcb(me.m2input);
    查看完整代码和demo。

    内聚
    其实关于内聚也分为很多种,如下所示,如果你感兴趣可以自己研究研究,我们下次再来分享内聚的问题。

    偶然内聚
    逻辑内聚
    时间内聚
    通信内聚
    顺序内聚
    功能内聚

    转载于:https://www.cnblogs.com/wuwangxiaochou/p/10816183.html

    展开全文
  • 但是现实生活还有一种状态就是,整天很轻松,没什么劳心费力的事儿,工作轻松,生活轻松,虽然不能大富大贵,但也不至于为衣食发愁,是不是这种状态非常的好呢?  其实这种状态好与不好,这种状态的存在...

      常言道人无远虑必有近忧,意思是说一个人如果没有长远的计划和考量,那么他就会被现在的琐事牢牢缠绕住。但是现实生活中还有一种状态就是,整天很轻松,没什么劳心费力的事儿,工作轻松,生活轻松,虽然不能大富大贵,但也不至于为衣食发愁,是不是这种状态非常的好呢?

      其实这种状态好与不好,取决于这种状态的存在基础!如果经历一番困苦奋斗后,实现了财务自由,然后做自己喜欢的事情,那么这种状态非常好,并且可以持久下去,犹如暴风雨后的彩虹!

      如果此状态只是碌碌无为的一种表现,那么状态不仅不好,而且可能不会长久下去,此时就处于人无近忧的状态,是否有远忧取决于这种生活是否长久下去,取决于环境的变化,排除个人意愿!

      此状态的人和事物处于相对稳定的外界环境,如果环境改变,那么就如同温室被打破,里面的花朵就被璀璨了。圏养的老虎,如果离开衣食无忧的圈养环境,那么就可能会饿死。公务员,如果改为聘用形式,那么可能失去稳定安逸的生活,从而在变幻的外面可能会频繁碰壁(现在有地区已经实现聘用制);教师,稳定的工作,稳定的生活,一切都是那么稳定,而现在人口的减少,尽管放开二胎,但如果没有出现新的婴儿潮,学生数量的减少必然导致老师的需求数量减少,那么十几年的老师被迫从事其它职业,比如门卫(新闻上出现的情况);国企吃大锅饭的员工,有谁会想到下岗呢,当初日子虽然工资低,但是日子比较清闲,滋润啊!

      总是听到这么一些话,没有你想不到的,就怕你做不到的。生活环境的变化类似,没有你想得到的,只有你准备适应的!初高中学习时,永远争夺前面的名次,唯恐自己被别人落下。但现在是你的改变和生活环境的改变进行较量,你改变的速度落后于生活环境的改变,那么生活会给你响亮的耳光,然后让你补课,让你继续追逐它。当你追逐不上它,那么耳光会不间断地在你脸上的,也许我们感受不深刻,但是你一定有想买后悔药的时候,那时就是你最深刻的体会!

      古时,人类为了生存,不断学习新技能,比如学会生火,使用石器,使用木头,使用弓箭,制作青铜器,建造房屋,那时候不能成为生活,生存是及其不容易的!现在呢,吃饱不饿死不冻死就是生存下来了?古人的生存是死和活,现在人的生存是卑微和有点品质生活!我们都是温水(生活)里的青蛙(人),当你习惯了温水,习惯了现在无忧愁的日子,虽然不是多么好,但是也还行的日子,没事的时候可以即矫情矫情,我们每天过的日子都雷同,那么其实我们的日子只有一天啊!生活的骤变,就是你头上的斧锧,无论你意识到与否都不会改变,只是你是否有还手之力而已!当你老了,没有时间,没有精力了,它的到来只预示着必然的结果而已!

      但是我知道,你依旧还是打算做那只舒服的青蛙!你好,青蛙,我会给你挖个坑的!不必说可怜之人必有可恨之处,只是如果一个人有可恨之处,谈什么可怜呢!

    转载于:https://www.cnblogs.com/zhtzyh2012/p/5204433.html

    展开全文
  • 统计显示,到2020年,全球将有500亿台设备实现连接,当您将传感器、设备和智能机器连接到网络,还有一件可千万不要忽略:智慧城市的规模化应用,网络安全设备的应用量也随之...网闸的“闸”字船闸的意思...
  • 1.11 extern在函数声明什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef和#define有什么区别? 1.14 我似乎不能成功定义一个链表。我试过typedefstruct{char*...
  • 2.26 一些结构声明的这些冒号和数字是什么意思? 2.27 为什么人们那么喜欢用显式的掩码和位操作而不直接声明位域? 第3章 表达式 求值顺序 3.1 为什么这样的代码不行?a[i]= i++; 3.2 使用我的编译器,下面的代码...
  • 2.26 一些结构声明的这些冒号和数字是什么意思? 2.27 为什么人们那么喜欢用显式的掩码和位操作而不直接声明位域? 第3章 表达式 求值顺序 3.1 为什么这样的代码不行?a[i]= i++; 3.2 使用我的编译器,下面的代码...
  • 1.11 extern在函数声明什么意思? 6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef 和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.11 extern在函数声明什么意思? 6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,typedef 和#define有什么区别? 7 1.14 我似乎不能成功定义一个链表。我试过...
  • java面试宝典

    2013-02-28 16:04:01
    47、在java 中一个类被声明为final 类型,表示了什么意思? 12 48、下面哪些类可以被继承? 12 49、指出下面程序的运行结果: 【基础】 13 52、关于内部类: 13 53、数据类型之间的转换: 14 54、字符串操作:如何实现...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    47、在java 中一个类被声明为final 类型,表示了什么意思? 12 48、下面哪些类可以被继承? 12 49、指出下面程序的运行结果: 【基础】 13 52、关于内部类: 13 53、数据类型之间的转换: 14 54、字符串操作:如何实现...
  • php高级开发教程说明

    2008-11-27 11:39:22
    什么意思?)在此处讨论并不重要。重要的是:形式分析的结果越好,逻辑分析就越容易、 越快、越好。 逻辑分析能补偿形式分析失去的信息,但仅仅是在一个有限的程度上补偿。 你也许能读懂前面的这个句子,但要...
  • 翻译的过程,译者感到此言不虚:作者从数据库的基本概念到数据库建模,从如何运用规范化原则到如何做成实际的数据库表,从如何保护数据库完整性到如何提高数据库的性能,从数据库的安全机制到并发事务控制,从...
  • 代表什么意思?  (1)安全模式:选用安全模式启动Windows XP时,系统只使用一些最基本 的文件和驱动程序启动。进入安全模式是诊断故障的一个重要步骤。如果安 全模式启动后无法确定问题,或者根本无法启动安全...
  • <div><h1>深入浅出 - vue之State 本文讲的内容是 vue 1.0 版本~ 有些同学可能不知道state是什么,可能还会有疑问,这个跟vuex的state是不是有啥联系࿱...而 <code>object</code> 类型的直接 <code>...
  • 四个学院各有特色,大家可以根据自身的兴趣进行报考,未来你个人的研究方向主要你导师的研究方向,和学院关系不大。 每个学院的专业设置,考试科目也略有差别,详见 招生专业目录 2. 北邮不同学院的相同...
  • LINGO软件的学习

    2009-08-08 22:36:50
    LINGO内置的建模语言是一种描述性语言,用它可以描述现实世界的一些问题,然后再借助LINGO求解器求解。因此,集属性的值一旦在模型被确定,就不可能再更改。在LINGO,只有在初始部分给出的集属性值在以后...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    答:以现在MCU产品主力还是在8位领域,主要应用汽车应用、消费性电子、电脑及PC周边、电信与通讯、办公室自动化、工业控制等六大市场,其中车用市场多在欧、美地区,而亚太地区则以消费性电子为主, 并以量大...
  • MySQL命令大全

    2018-01-15 11:19:17
    4:查看现在的数据库存在什么表 mysql> SHOW TABLES; 5:创建一个数据库表 mysql> Create TABLE MYTABLE (name VARCHAR(20), sex CHAR(1)); 6:显示表的结构: mysql> DESCRIBE MYTABLE; 7:往表加入记录 ...
  • 面再提示缺少什么dll 文件,都像这样解决就可以了。 二、Qt Creator 编写多窗口程序(原创) 实现功能: 程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直 接关闭这个对话框,便不能进入主窗口,整个程序...
  • MYSQL常用命令大全

    2011-05-30 13:31:24
    4:查看现在的数据库存在什么表 mysql> SHOW TABLES; 5:创建一个数据库表 mysql> Create TABLE MYTABLE (name VARCHAR(20), sex CHAR(1)); 6:显示表的结构: mysql> DESCRIBE MYTABLE; 7:往表加入记录 mysql> ...
  • 例如, pf1+pf2是什么意思呢?毫无实际意义。 ②两指针变量进行关系运算 指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。例如: pf1==pf2表示pf1和pf2指向同一数组元素 pf1>pf2表示pf1...
  • 一般人不会那么逼问你到底干嘛去的。 开口提辞职时先要有一个借口,比如什么通勤太远啦、加班太多啦等等的一些个人原因。然后再感激一下领导和公司这一段时间的栽培给自己带来了很大的成长,最后表示...
  • react进阶之高阶组件

    2021-01-02 06:55:07
    在hoc中取到组件的实例。通过打印,可以看到它的props, state,都是可以取到的。</li></ul> <pre><code>javascript import React, { Component } from 'react'; const refHoc = ...
  • 翻译主要意思即可,不要超过 100 个字符) 【國宴大師•清燉獅子頭】大爺二伯奉上國宴佳品,淮陽千年名菜,肉酥軟爛,湯清味濃,溫馨如初的小廚房終回歸 |老飯骨 简介 小友們...
  • <div><h2>写在最前 事情的起因是这段看起来不像代码的代码: <p><img alt="_20170825232240" src=...有兴趣的同学可以自己先尝试下! <pre><code> ([]+[][(![]+...[]+...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

于中取事什么意思