首页 > 其他分享 >WPF MVVM入门系列教程(二、依赖属性)

WPF MVVM入门系列教程(二、依赖属性)

时间:2024-09-30 16:49:13浏览次数:7  
标签:教程 依赖 DependencyProperty MVVM NET WPF public 属性

说明:本文是介绍WPF中的依赖属性功能,如果对依赖属性已经有了解了,可以浏览后面的文章。

 

为什么要介绍依赖属性

在WPF的数据绑定中,密不可分的就是依赖属性。而MVVM又是跟数据绑定紧密相连的,所以在学习MVVM之前,很有必须先学习一下依赖属性。

 

依赖属性(Depencency Property)是什么

先来看看MSDN上的解释:

WPF提供一组服务,这些服务可用于扩展类型的属性的功能。 这些服务统称为 WPF 属性系统。 由 WPF 属性系统提供支持的属性称为依赖属性。

通俗点来说,WPF的依赖属性就是在.NET属性的基础上进行的扩展。它除了具备.NET属性的功能之外,还具备一些其它的扩展功能,如:值验证、默认值、值修改时的回调、转换器等。

 

我们先来看看.NET属性,也就是平常我们在C#中使用的属性

 1     public class CLRProperty
 2     {
 3         private int id;
 4 
 5         public int Id
 6         {
 7             get => id;
 8             set => id = value;
 9         }
10     }

 

再来看看依赖属性

以Button控件的Content属性为例

 1 public static readonly DependencyProperty ContentProperty = = DependencyProperty.Register("Content", typeof(object), typeof(ContentControl), new FrameworkPropertyMetadata((object)null, (PropertyChangedCallback)OnContentChanged));
 2 
 3  public object Content
 4  {
 5      get
 6      {
 7          return GetValue(ContentProperty);
 8      }
 9      set
10      {
11          SetValue(ContentProperty, value);
12      }
13  }

 

可以看到它也有一个get和set(即.NET的属性包装器),但是没有私有变量,而是通过GetValue和SetValue来完成取值和赋值。

在使用上依赖属性和.NET属性无异。

如有一个Button控件,命名为btn_Ok

可以在XAML中直接设置依赖属性的值

1 <Button Name="btn_Ok" Content="HelloWorld"></Button>

 

也可以在后台代码中设置

1  btn_Ok.Content = "HelloWorld";

 

 

如何创建依赖属性

大多数在使用WPF原生控件的情况下,我们都是使用依赖属性,而非创建它。但是在自定义控件时,可能会需要用到依赖属性功能。

依赖属性对象不能直接被实例化,因为它没有公开的构造函数,只能通过DependencyProperty.Register()方法创建实例。

 

我们这里以自定义一个MyButton控件为例。

 

1、定义表示属性的对象

注意:这里使用了static readonly关键字,且对象命名时,后面都加上Property。

1 public static readonly DependencyObject ImageProperty;

 

2、注册依赖属性

1 ImageProperty = DependencyProperty.Register("Image", typeof(ImageSource), typeof(MyButton),new PropertyMetadata(null, OnImagePropertyChanged));

 

DependencyProperty.Register函数支持多种重载,下面这是一种比较常用的重载。

1 public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata);

 

下面来介绍一下它各个参数的作用

name:这个参数用于指定.NET属性包装器的名称

propertyType:指明依赖项属性存储什么类型的值,这里是ImageSource类型,代表图像数据

ownerType:指明此依赖属性的宿主是什么类型,这里是MyButton

typemetaData:指定此依赖属性的元数据,元数据定义依赖属性在应用于特定类型时的某些行为方面,包括默认值、值更改时的回调等。上面的代码中,typeMetadata的第一个参数代表依赖属性的默认值,设置为null,第二个参数是在值更改时的回调函数,这里是调用OnImagePropertyChanged函数。

 

3、添加属性包装器

1         public ImageSource Image
2         {
3             get => (ImageSource)GetValue(ImageProperty);
4             set => SetValue(ImageProperty, value);
5         }

 

4、使用依赖属性

XAML

1 <local:MyButton x:Name="btn_Ok" Image="logo.jpg"/>

 

后台代码

1  this.btn_Ok.Image = new BitmapImage(new Uri("logo.jpg", UriKind.Relative));

 

标签:教程,依赖,DependencyProperty,MVVM,NET,WPF,public,属性
From: https://www.cnblogs.com/zhaotianff/p/18442104

相关文章

  • WPF Progrss bar stringformat {} {0}% IsDetermined
    //xaml<Windowx:Class="WpfApp425.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • 班迪儿录屏 Bandicam v7 下载及详细安装教程,办公学习必备
    具体安装方式如下:地址:Bandicam-7.0.2.2138-x64-Portable.zip下载解压后将BandicamPortable.exe发送到桌面快捷方式启动桌面图标可以正常使用了......
  • (二)WPF布局
    <Windowx:Class="WpfTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.c......
  • 卓越网络安全教程笔记-四-
    卓越网络安全教程笔记(四)P64:11.4-【Metasploit渗透】Metasploit基本使用方法-2-一个小小小白帽-BV1Sy4y1D7qv好接下来我们来看另外一个比较重要的命令,也是我们会经常会用到的一个命令啊,模块相关的命令,柚子的使用方法啊,柚子那么英文翻译过来呢是使用的意思哎,主要通过这个命令......
  • WLAN无线网卡驱动安装教程
    火影官方驱动下载地址下载WLAN无线网卡驱动下载完成后点击全部解压缩解压完成后有一个安装说明,查看自己的网卡是什么品牌的,不知道就一个一个的全部都安装一遍安装过程不用管显示什么,结束了就进行下一个就行全部运行安装过一遍后重启查看是否有WiFi开关......
  • 【PR2024】Adobe Premiere Pro视频编辑软件下载安装与pr教程(附下载链接)
    AdobePremiere简介AdobePremierePro(PR)是由Adobe公司开发的一款专业视频编辑软件,广泛应用于电影、电视、广告、网络视频等领域。该软件提供了完整的视频编辑流程,使用户能够导入、编辑和处理各种视频、音频和图像文件,包括剪辑、裁剪、添加过渡效果、特效、文本、音乐和声音等......
  • SM2244LT量产工具经验分享,SM2244LT量产工具下载,SM2244LT开卡教程
    一、注意事项1、个人观点,仅供参考2、开卡后无法恢复数据二、开卡前的准备1、坏固态硬盘一个(确认主控芯片是慧荣SM2244LT)2、尖头镊子(细铜线、铁丝等能导电的金属都行,塑料的不行)3、一台电脑(可以是笔记本或台式机,台式机最好不要用后置USB)4、转接卡(可以是开卡板、硬盘盒等,建......
  • cmd发邮件:Windows命令行发送邮件的教程!
    cmd发邮件怎么通过命令行实现?如何使用CMD发送邮件?通过cmd发邮件,你可以在不打开任何邮件客户端的情况下,直接从命令行发送邮件。AokSend将详细介绍如何使用cmd发邮件功能,让你轻松掌握这一实用技能。cmd发邮件:基本原理cmd发邮件的基本原理是通过调用Windows系统中的邮件发送工......
  • spring security 超详细使用教程(接入springboot、前后端分离)
    SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用。它提供了身份验证(验证用户身份)、授权(管理用户权限)和防护机制(如CSRF保护和防止会话劫持)等功能。SpringSecurity允许开发者通过灵活的配置实现安全控制,确保应用程序的数据和资......
  • 郁金香游戏辅助教程笔记-七-
    郁金香游戏辅助教程笔记(七)P200:217-游戏多开补丁编写_old-教到你会-BV1DS4y1n7qF大家好,我是郁金香老师,那么上一节课呢我们简单的探讨了,那以下这个游戏多开的另外的一种原理,那么这节课呢我们通过上上一节课分析的数据。然后呢来编写相应的代码,那么首先我们打开vs2010。......