你的位置:首页 > ASP.net教程

[ASP.net教程]WPF 后台数据触发改变界面状态


今年做的一个上位机工控WPF项目,做个小小的总结把,以后随时来找

请不要带血乱喷,我只是菜鸟.___by 鲍队

 

类似于这样子的;大致的意思是:一个代码变量,通过改变变量的值,绑定这个变量的这个圆颜色也在变化 就是一种心跳效果

在网上数据触发的感觉不多,废了不少时间,这里做个总结

1:通知

class NotifyBase : INotifyPropertyChanged  {    public event PropertyChangedEventHandler PropertyChanged;    public void OnPropertyChanegd(string propertyName)    {      if (PropertyChanged != null)      {        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));      }    }  }


class NotifyModels:NotifyBase   {    private bool heartBeat;    public bool HeartBeat    {      get { return heartBeat; }      set { heartBeat = value;      OnPropertyChanegd("HeartBeat");      }    }      }

第一个就不用说了,通知的基类,

第二个是我需要的数据,就是bool类型的心跳(平常可以检测与下位机其他通信软件的通信状态,直观)

2:矩形的代码

这个数据触发 Binding="{Binding HeartBeat}" 绑定了后台DataContext的心跳

改变进行对应的样式改变;我用的是bool型,所以用的True/False;看类似int也可以

 <Ellipse x:Name="ellStatus" VerticalAlignment="Center" HorizontalAlignment="Center"   MinHeight="50" MinWidth="50" MaxHeight="50" MaxWidth="50" >      <Ellipse.Style >        <Style TargetType="{x:Type Ellipse}">          <Style.Triggers>             <DataTrigger Binding="{Binding HeartBeat}" Value="True">              <Setter Property="Shape.Fill" Value="Red"/>            </DataTrigger>            <DataTrigger Binding="{Binding HeartBeat}" Value="False">              <Setter Property="Shape.Fill" Value="White"/>            </DataTrigger>          </Style.Triggers>        </Style>      </Ellipse.Style>    </Ellipse>

 

 

3:后台的代码

利用一个计时器改变通知里面的值

赋给

 ellStatus.DataContext = models; 
就完成了
public partial class MainWindow : Window  {    NotifyModels models;    private System.Timers.Timer timer;    public MainWindow()    {      InitializeComponent();      models = new NotifyModels();      ellStatus.DataContext = models;       timer = new System.Timers.Timer(1000);      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);      timer.Enabled = true;    }    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)    {      models.HeartBeat = !models.HeartBeat;    }