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

相关推荐
无极小卒1 分钟前
如何在三维空间中生成任意方向的矩形内部点位坐标
开发语言·算法·c#
the白勺1 小时前
RabbitMQ-基础-总结
开发语言·c#
专注VB编程开发20年3 小时前
C#VB.NET中实现可靠的文件监控(新建、删除、改名、内容修改等事件的准确捕获)
spring·c#·.net·文件监控
yi碗汤园5 小时前
【一文了解】C#反射
开发语言·unity·c#
T.Ree.7 小时前
汇编_读写内存
开发语言·汇编·c#
czhc11400756637 小时前
C#1114 枚举
开发语言·c#
曹牧8 小时前
C#中,GetValueOrDefault方法
c#
SunnyDays101112 小时前
使用 C# 实现 Excel 与 DataTable 相互转换
c#·excel转datatable·datatable转excel
獨枭21 小时前
C# 本地项目引用失效与恢复全攻略
开发语言·c#·visual studio
清风与日月1 天前
c# 上位机作为控制端与下位机通信方式
单片机·嵌入式硬件·c#