wpf之MVVM中只读属性更新界面
前言
在wpf程序中有时候某个属性是只读属性,该属性的值是根据其他属性获取的,只读属性本身无法更新界面,本来就来介绍如何在只读属性中更新界面。
1、读写属性更新界面
改变属性isStatus1的值就可以改变控件CheckBox的状态
public class ViewModelBase : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string propname){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(propname));}}}
public class ViewModel : ViewModelBase{private bool _isStatus1 = false;public bool isStatus1{get{return _isStatus1;}set{_isStatus1 = value;OnPropertyChanged("isStatus1");}}}
<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 控件更新。
public class ViewModelBase : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string propname){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(propname));}}}
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 "空闲";}}}}
<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数据库从入门到精通》