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数据库从入门到精通》

相关推荐
czhc114007566341 分钟前
c#w 1214
开发语言·c#
用户298698530141 小时前
C# 中如何从 URL 下载 Word 文档:基于 Spire.Doc 的高效解决方案
后端·c#·.net
wangbing11251 小时前
将swagger在线文档转为word
microsoft·c#·word
mangge081 小时前
定时刷新已经登录过的网页c#
c#
走错路的程序员3 小时前
C语言单片机与C#上位机之间传递大量参数比较好的实践方案
c语言·单片机·c#
辜月廿七4 小时前
C#字符串相关知识
c#
狮恒4 小时前
OpenHarmony Flutter 分布式数据持久化:跨设备数据一致性与同步方案
分布式·flutter·wpf·openharmony
波波0074 小时前
使用.NET 四步玩转 AI 绘图|不用Python、不买显卡
开发语言·c#·.net
唐青枫4 小时前
深入理解 C#.NET 运算符重载:语法、设计原则与最佳实践
c#·.net
工程师0075 小时前
C# HSL 与欧姆龙 CIP 协议(EtherNet/IP)的详细通信
网络协议·tcp/ip·c#·欧姆龙cip协议·hsl