码迷,mamicode.com
首页 > Windows程序 > 详细

WPF 后台数据触发改变界面状态-心跳实现

时间:2016-01-30 13:34:56      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:

今年做的一个上位机工控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;
        }

 

WPF 后台数据触发改变界面状态-心跳实现

标签:

原文地址:http://www.cnblogs.com/AllowCloud/p/5170618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!