wpf之MVVM中只读属性更新界面

前言

在wpf程序中有时候某个属性是只读属性,该属性的值是根据其他属性获取的,只读属性本身无法更新界面,本来就来介绍如何在只读属性中更新界面。

1、读写属性更新界面

改变属性isStatus1的值就可以改变控件CheckBox的状态

csharp 复制代码
public class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string propname)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propname));
            }
        }
    }
csharp 复制代码
 public class ViewModel : ViewModelBase
    {
        private bool _isStatus1 = false;

        public bool isStatus1
        {
            get
            {
                return _isStatus1;
            }

            set
            {
                _isStatus1 = value;
                OnPropertyChanged("isStatus1");
            }
        }
    }
csharp 复制代码
<Window x:Class="wpf之Ellipse.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:wpf之Ellipse"
        mc:Ignorable="d"
        Title="MVVM绑定只读属性" Height="450" Width="800">
    <Grid>
        <StackPanel Orientation="Vertical"  >
                       <CheckBox IsChecked="{Binding isStatus1  }"  Width=" 20" Height=" 20" Background="Green"  />
        </StackPanel >
    </Grid>
</Window>

2、 只读属性

2.1 不勾选CheckBox

2.1 勾选CheckBox

TextBlock 控件绑定的是Status属性,但是这个属性是一个只读属性,它是根据属性isStatus1的值来更新的,由于Status属性本身没有更新界面的机制,所以需要在isStatus1属性的Set方法中加入OnPropertyChanged("Status");这行代码来实现Status属性绑定的TextBlock 控件更新。

csharp 复制代码
 public class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string propname)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propname));
            }
        }
    }
csharp 复制代码
 public class ViewModel : ViewModelBase
    {
        private bool _isStatus1 = false;

        public bool isStatus1
        {
            get
            {
                return _isStatus1;
            }

            set
            {
                _isStatus1 = value;
                OnPropertyChanged("isStatus1");
                OnPropertyChanged("Status");
            }
        }

        public string Status
        {
            get
            {
                if (isStatus1)
                {
                    return "状态1";
                }
                else
                {
                    return "空闲";
                }
            }

        }
    }
csharp 复制代码
<Window x:Class="wpf之Ellipse.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:wpf之Ellipse"
        mc:Ignorable="d"
        Title="MVVM绑定只读属性" Height="450" Width="800">
    <Grid>
        <StackPanel Orientation="Vertical"  >
            <TextBlock Text="{Binding Status}"  Height=" 20" Background="Red"  TextAlignment="Center"    />
            <CheckBox IsChecked="{Binding isStatus1  }"  Width=" 20" Height=" 20" Background="Green"  />
        </StackPanel >
    </Grid>
</Window>

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)

1、《C#串口通信从入门到精通》

2、《C#与PLC通信从入门到精通 》

3、《C# Modbus通信从入门到精通》

4、《C#Socket通信从入门到精通 》

5、《C# MES通信从入门到精通》

6、《winform控件从入门到精通》

7、《C#操作MySql数据库从入门到精通》

相关推荐
泛凡(Linyongui)12 小时前
基于 CW32L010 的智能厨卫调温旋钮方案--低成本 EC21 编码旋钮全解析
单片机·嵌入式硬件·c#
暴走约伯14 小时前
【VFX工具链源码拆解 02】告别机械劳动(上):一键统改百个子粒子颜色与批量重命名
3d·unity·c#·材质
信息安全失业大专人员16 小时前
每日了解一个智能体-WorkBuddy
开发语言·ai·c#·智能体
呆呆敲代码的小Y16 小时前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
淡海水17 小时前
09-01-内存-Unity资源生命周期全景
unity·c#·游戏引擎·.netcore·gc
椒颜皮皮虾྅20 小时前
让 C# 读懂整张图:DeploySharp 驱动 PaddleOCR v4/v5/v6,打通 OCR 全流程
开发语言·人工智能·深度学习·学习·c#·ocr·cuda
昂好的day20 小时前
C# 同步异步与多线程:Thread / Task / 线程池一次讲透(上篇)
开发语言·windows·c#
avi911121 小时前
电影开源Jevdo - 源码介绍(vue版)没有android 和 没有wpf
android·wpf·框架·数据爬虫·meego·电影管理
吃一碗粉只付一碗钱1 天前
12-给SPA友好的401和403响应
c#·状态模式
caimouse1 天前
MonoDevelop 编译用户应用程序时调用的是哪个编译器
c#