• 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;
            }
  • 相关阅读:
    final-第十章
    路由器基本配置-命令行配置模式
    路由器基本配置-对话配置模式
    配置静态路由
    默认路由
    像素值的读写
    矩阵的基本元素表达
    创建Mat对象
    Mat类
    数学基础-3D空间的位置表示
  • 原文地址:https://www.cnblogs.com/AllowCloud/p/5170618.html
Copyright © 2020-2023  润新知