WPF用户控件User Control的使用-在MVVM架构下实现能量条效果

news2024/9/22 1:33:09

一、用户控件介绍

定义

  • 用户控件是由一组现有的WPF控件组成,并在一个XAML文件中定义的可重用的控件。
  • 它可以包含多个控件、布局和行为,形成一个独立的、可在应用程序中多次使用的模块。

特点

  • 可重用性:用户控件的设计目的是提高代码的重用性,使得界面元素的组合和布局能够在应用程序中重复利用。
  • 模块化:通过将界面划分为多个独立的用户控件,可以实现更好的模块化设计,有助于代码的维护和管理。
  • 易于扩展:用户控件可以根据需要轻松地进行扩展,包括添加新的控件、更改布局或修改逻辑等。

二、效果展示

 

通过数据绑定添加相关的逻辑,实现能量条的动态显示。

三、实现过程

1.创建用户控件

根据下图在项目中创建用户控件

2.编辑用户控件

在用户控件的Xaml文件中编辑添加所需要的元素

<StackPanel Orientation="Vertical">
    <ProgressBar Orientation="Vertical" Maximum="{Binding Max}" Minimum="0" Value="{Binding Value}" Height="300" Width="100"/>
</StackPanel>

3.把用户控件放入主窗口

在用户控件编辑完成后,注意需要对项目进行重新生成,然后打开工具箱,就可将用户控件拖入主窗口

<Grid Background="White">
    <local:UserControl1 HorizontalAlignment="Left" Margin="300,60,0,0" VerticalAlignment="Top" DataContext="{Binding Page4Model.Count[0]}"/>
</Grid>

 4.在model中创建数据类型数据

public class Page4Model : NotifyBase
 {
     private Dictionary<int, Detail> _count = new Dictionary<int, Detail>();
     public Dictionary<int, Detail> Count
     {
         get { return _count; }
         set { _count = value; OnPropertyChanged(nameof(Count)); }
     }


 }

 public class Detail : NotifyBase
 {
     private int value;

     public int Value { get => value; set {this.value = value; OnPropertyChanged(nameof(value));}}
     

     private int max;
     public int Max { get => max; set {max = value; OnPropertyChanged(nameof(Max)); } }
 }

你如果没有INotifyPropertyChanged接口,可以用这个

  public class NotifyBase:INotifyPropertyChanged
  {
      //数值更改进行界面的同时
      public event PropertyChangedEventHandler? PropertyChanged;
      public void OnPropertyChanged(string propertyName)
      {
          if (PropertyChanged != null)
          {
              PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
          }
      }
  }

5.创建ViewModel,对数据进行赋值更新

public class Page4ViewModel
{        
    public Page4Model Page4Model { get; set; } = new Page4Model();

    bool a=false;

    public Page4ViewModel() 
    {
        Page4Model.Count.Add(0,new Detail() {Max=100, Value=0 });

        Task.Run(async () =>
        {
            while (true)
            {
                await Task.Delay(500);
                if (a)
                {
                    Page4Model.Count[0].Value++;
                    if (Page4Model.Count[0].Value > 99) { a= false; }
                }else { Page4Model.Count[0].Value--;
                    if (Page4Model.Count[0].Value < 1) { a = true; }
                }
                
                //因为Conut是个字典 是属于引用类型 更改引用类型,则需要new 盏内存是不会改变到的
                Page4Model.Count = new Dictionary<int, Detail>(Page4Model.Count);
            }
        });

    }


}

最后不要忘记在xaml.cs调用Viewmodel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux的oracle数据库导入其他用户导出的数据库文件

如果用户使用的是expdp的命令&#xff0c;导入就要使用impdp命令&#xff0c;本文以impdp为例进行介绍 1、查看当前创建的所有dmp导出目录 select * from dba_directories 2、为创建的目录赋权限 比如咱们将数据库导入到test用户&#xff0c; grant read,write on directo…

C语言int24转int32 .

数据可能以 24 位格式编码。需要在处理这些数据时进行正确的解析和转换。 #include <stdint.h> #include <stdio.h>// 将 24 位有符号整数&#xff08;存储为 3 字节的数组&#xff09;转换为 32 位整数 int32_t int24to32(uint8_t bytes[3]) {// 将 24 位整数转换…

【动态规划算法题记录】最长/最大 问题汇总 (leetcode)

目录 32. 最长有效括号思路代码 300. 最长递增子序列思路代码 674. 最长连续递增序列思路1&#xff1a;双指针代码1&#xff1a;双指针思路2&#xff1a;dp代码2&#xff1a;dp 718. 最长重复子数组思路1&#xff1a;dp代码1&#xff1a;dp思路2&#xff1a;dp优化代码2&#x…

安恒信息总裁离职,转型创业开起了饭店,你怎么看?

【科技明说 &#xff5c; 科技热点关注】 8月20日&#xff0c;前安恒信息总裁宋端智开办自己公众号官宣离职&#xff0c;一心投入了大排档&#xff0c;转型做起了餐饮行业。 据他官宣信息透露&#xff0c;不久前辞去了安恒信息总裁职务&#xff0c;决定把重心放到餐饮创业上。…

虹科免拆诊断案例 | 2012 款捷豹 XJ 车发动机怠速轻微抖动

障现象  一辆2012款捷豹XJ车&#xff0c;搭载3.0T发动机&#xff08;型号为306PS&#xff09;&#xff0c;累计行驶里程约为14.7万km。车主反映&#xff0c;发动机怠速轻微抖动&#xff0c;感觉不舒服&#xff0c;为此先后更换过火花塞、点火线圈、喷油器及氧传感器等&#x…

安装Cellpose

Cellpose是目前运用范围最广、效果最好的细胞分割模型&#xff0c;以下是安装方法。 3.1 安装cellpose 3.1.1 创建cellpose 打开Anaconda Navigator,如下图所示&#xff1a; 图3.1.1.1 Anaconda Navigator 依次点击 Environments、Create&#xff0c;在弹出的窗中&#xff0…

校园志愿者管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

钢铁百科:A633C美标高强度钢板、A633C化学成分分析、A633C执行ASTM A633/A633M标准

A633C是一种美国ASTM标准的高强度低合金结构钢&#xff08;HSLA&#xff09;&#xff0c;广泛应用于工程结构建设中&#xff0c;特别是在那些需要更高强度和更好焊接性能的场合。 1. **材质解析&#xff1a; - A633C钢是一种碳锰调质高强度结构钢&#xff0c;通过添加合金元素…

全网刷屏的《黑神话:悟空》,在deepin 23上玩是一种什么体验?

查看原文 过年了&#xff01;&#xff01;&#xff01; 8月20日上午10点&#xff0c;首款国产现象级3A游戏《黑神话&#xff1a;悟空》正式上线。 “重走西游&#xff0c;直面天命&#xff01;” 作为国产第一款3A游戏大作&#xff0c;《黑神话&#xff1a;悟空》称得上是里…

产品经理原型设计工具 Axure 的使用

原型设计工具 Axure 中文学习网&#xff1a;https://www.axure.com.cn/ 1、安装 2023年Axure RP9最新安装、汉化教程&#xff08;附带安装包下载&#xff09; 2、基本使用 Axure rp9入门图文教程——基操及介绍&#xff08;看完就能上手&#xff0c;人人都是产品经理&#x…

微软发布功能强大的全新 Phi-3.5 机型,击败谷歌、OpenAI 等公司

微软并没有因为与 OpenAI 的合作而满足于其在人工智能领域的成功。 相反&#xff0c;这家因总部位于华盛顿州而被称为雷德蒙德&#xff08;Redmond&#xff09;的公司今天发布了其不断发展的语言/多模态人工智能 Phi 系列中的 3 个新模型。这三个模型分别针对基本/快速推理、更…

pygame开发课程系列(4): 游戏元素

第四章 游戏元素 在本章中&#xff0c;我们将深入探讨如何在 Pygame 中处理游戏元素&#xff0c;包括键盘输入、鼠标输入、图像加载和声音播放。这些元素是构建互动游戏的基础&#xff0c;能够让你的游戏变得更生动、更有趣。 4.1 处理键盘输入 键盘输入是控制游戏角色或元素…

微服务及安全

一、微服务的原理 1.什么是微服务架构 微服务架构区别于传统的单体软件架构,是一种为了适应当前互联网后台服务的「三高需求:高并发、高性能、高可用」而产生的的软件架构。 单体式应用程序 与微服务相对的另一个概念是传统的单体式应用程序( Monolithic application ),…

【Git】分支的创建、提交、合并、冲突、删除

Git分支 分支的创建更改的提交合并分支到主支解决冲突删除分支 可以将项目不断修改调整的过程放到分支上&#xff0c;修改定性之后再将分支内容向主支合并 分支的创建 //创建一个新的分支&#xff08; new-fenzhi&#xff1a;自定义分支名 &#xff09; git branch new-fenzhi…

【源码】基于Java开发的HRM人力资源管理系统(企业人力管理实际项目)

在当今企业迅速扩张与业务日益复杂的环境下&#xff0c;传统的人力资源管理方式已显得力不从心。为了应对这一挑战&#xff0c;eHR人力资源管理系统应运而生&#xff0c;它以其强大的功能和卓越的性能&#xff0c;为企业的人力资源管理带来了革命性的变革。 一、系统概览与技术…

AI文本转语音:Toucan TTS 支持 7000 多种语言的语音合成工具箱,突破性 OCR 技术:支持多种语言识别,媲美顶级云服务

AI文本转语音&#xff1a;Toucan TTS 支持 7000 多种语言的语音合成工具箱&#xff0c;突破性 OCR 技术&#xff1a;支持多种语言识别&#xff0c;媲美顶级云服务。 AI文本转语音&#xff1a;Toucan TTS 支持 7000 多种语言的语音合成工具箱 Toucan TTS是由德国斯图加特大学自…

【教程】Win11用户必看:旧版记事本恢复方法!

在Win11电脑操作中&#xff0c;很多用户并不喜欢新版的记事本&#xff0c;想知道有什么方法能够恢复旧版记事本&#xff1f;首先需要打开Win11系统设置选项&#xff0c;点击关闭记事本选项&#xff0c;然后从Windows文件夹或使用notepad命令来打开旧记事本。以下系统之家小编给…

探索Facebook的区块链计划:未来社交网络的变革

随着区块链技术的迅速发展&#xff0c;社交网络领域正面临一场深刻的变革。Facebook&#xff0c;作为全球最大且最具影响力的社交平台之一&#xff0c;正在积极探索区块链技术的应用。本文将深入探讨Facebook的区块链计划&#xff0c;分析其潜在的变革性影响&#xff0c;并展望…

2024年新SCI顶刊算法信息获取优化算法IAO优化Transformer-GRU模型的多变量时间序列预测

matlab R2024a以上 一、数据集 ​ ​ 二、2024年新SCI顶刊算法信息获取优化算法IAO 本期介绍了一种名为信息获取优化算法Information acquisition optimizer&#xff0c;IAO的元启发式算法。该算法受人类信息获取行为的启发&#xff0c;由信息收集、信息过滤和评估以及信息分…

A286螺栓产品特性及主要应用领域

A286螺栓是一种采用A286合金制成的高性能紧固件&#xff0c;具有优异的高温强度、耐腐蚀性能以及良好的加工性能。下面是关于A286螺栓的产品特性和主要应用领域的详细介绍。 产品特性 高温强度&#xff1a;A286合金在高温下仍能保持较高的机械强度&#xff0c;适用于高温环境下…