前言
在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>