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

相关推荐
SmoothSailingT13 小时前
C#窗体—子窗体获取父窗体TextBox框的值
c#·窗体
ysdysyn15 小时前
C# 进程管理实战:检查与启动EXE程序的完整指南
开发语言·c#
云缘若仙16 小时前
Godot游戏开发——C# (一)
c#·godot
花北城18 小时前
【C#】List快速检查重复数据
开发语言·c#
sky-stars20 小时前
.NET 泛型编程(泛型类、泛型方法、泛型接口、泛型委托、泛型约束)
c#·.net·.netcore
壹佰大多21 小时前
【Redisson分布式锁源码分析-3】
数据结构·分布式·mysql·spring·spring cloud·wpf·lua
yue0081 天前
C# 类的属性介绍
c#·属性·
sali-tec1 天前
C# 基于halcon的视觉工作流-章54-N点标定
开发语言·图像处理·算法·计算机视觉·c#
LateFrames1 天前
以小白视角尝试 WPF / WinUI3 / MAUI / MAUI Blazor 构建 Windows 桌面程序
windows·wpf·maui·mauiblazor·winui3
切糕师学AI1 天前
C# 使用 CSRedisCore指南
redis·c#·.net core