• 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 在一起。

  • 相关阅读:
    C# 多线程和异步 (转发)
    WCF —— Endpoint & Binding & netTcpBinding Overview(转发)
    http 请求 —— 连接数问题 & httpclient 重用
    WCF ChannelFactory and channels caching, reusing, closing and recovery
    WCF ——从绑定元素认识系统预定义绑定 转载 & NetTcpBinding & 信道工厂(Channel Factory)(转发)
    在C#中利用KeepAlive处理Socket网络异常断开的方法
    WCF _ example
    What happens when I close/abort a WCF channel/proxy?
    WCF —— Consuming WCF Services in .NET Core – Best Practices(转发)
    Python shapely
  • 原文地址:https://www.cnblogs.com/zhaiyf/p/8315260.html
Copyright © 2020-2023  润新知