• WPF几个基础概念的浅显理解


    1、逻辑树与视觉树

    逻辑树在结构上与xaml文件对应

    视觉树更细化,拆分到控件的每个组成部分

    2、依赖属性与附加属性

    依赖属性:就是自己自己没有属性值,而是通过Binding从数据源获得值,就是依赖在别人身上,拥有依赖属性的对象称为依赖对象。

    附加属性:就是自己没有这个属性,在某些上下文中需要就被附加上去。比如TextBox的Grid.Row属性,如果我们定义TextBox类时定义一个Row属性是没有意义的,因为我们并不知道一定会放在Grid里,这样就造成了浪费。

    3、路由事件和附加事件

    路由事件:

    Button、Slider、TextBox这些类可拥有路由事件

    根据.NET约定,隧道路由事件总是以单词Priview开头(如PreviewKeyDown)

    对比下命令和路由事件的区别可以发现,路由事件必须写在Code-Behind代码中,而命令可以写在ViewModel里,所以直观上来讲命令更加自由灵活。

    附加事件(Attached Event):

    路由事件的另一种叫法,用于非继承自UIElement类

    4、命令

    命令与事件类似,事件用来发布传播一些消息,消息到达接收者,事件的使命就完成了,至于如何响应事件送来的消息事件并不做规定;而命令一旦发出,所有的命令目标都必须执行这个命令,二者的区别就在命令具有约束力而事件没有

    命令的基本元素:

    命令(Command):WPF的命令实际就是实现了ICommand接口的类,平时使用最多的是RotuedCommand类;
    命令源(Command Source):命令发送者,是实现类ICommandSource接口的类,例如Button、MenuItem、ListBoxItem等;
    命令目标(Command Target):命令将作用在谁身上,命令目标必须实现了IInputElement接口;
    命令关联(Command Binding):负责把一些外围逻辑与命令关联起来,比如执行前对命令是否可以执行进行判断、命令执行之后进行一些后续工作等。

    Button控件有Command属性,将实例化的Command赋值给Button控件,就可以在点击时执行该命令。但有的控件并不支持Command属性的设置,因此这些控件的事件产生时执行某个命令就成了一个问题。解决方法如下:

    <Button>  
        <i:Interaction.Triggers>  
            <i:EventTrigger EventName="MouseEnter" >  
                 <cmd:EventToCommand Command="{Binding FooCommand}" CommandParameter=""/>  
            </i:EventTrigger>  
        </i:Interaction.Triggers>  
    </Button>  

    5、验证

    1. 代码直接验证(不少人直接用 MessageBox  弹出消息,Windows 的老传统),虽然够醒目,却太过打扰用户,不好。
    2. 通过异常验证(数据绑定,并设置 ValidatesOnExceptions=True ),调试时烦死人,不好。
    3. 通过内置接口 IDataErrorInfo 、INotifyDataErrorInfo 进行验证(数据绑定),这应该是目前较为理想的验证方式。这两个接口都位于 System.ComponentModel 空间,与 INotifyPropertyChanged 在一起。

  • 相关阅读:
    SpringCloud学习笔记(6)——Eureka高可用
    上传大数据到SharePoint 2010
    批量导入导出站点权限site permissions
    List does not exist. The page you selected contains a list that does not exist. It may have been deleted by another user
    Change upload file limit in specified Webapllication in SharePoint (PowerShell)
    导出SharePoint2013用户及权限
    启用SharePoint 2013文档版本控制
    移除SharePoint2013里的NoteBook笔记本链接
    启用SharePoint 的 web application下面所有站点“备用语言”
    SharePoint 2013 event id 8321 错误
  • 原文地址:https://www.cnblogs.com/zhaiyf/p/8315260.html
Copyright © 2020-2023  润新知