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;
        }

 

posted @ 2016-01-30 10:45  多放辣椒  阅读(3193)  评论(4编辑  收藏  举报