zoukankan      html  css  js  c++  java
  • wpf数据绑定更新通知

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

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

    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;
            }
  • 相关阅读:
    linux常用命令
    Hibernate常用API以及使用说明
    Hibernate使用套路,新手请进
    git 完全讲解 无废话,包含在myeclipse中使用,包括解决冲突
    Spring使用事务增加的注解实现方
    java.lang.ClassCastException: com.sun.proxy.$Proxy27 cannot be cast to com.bbk.n002.service.QuestionService
    使用aspectJ实现Spring AOP的两种方式
    用Diff和Patch工具维护源码
    opennebula 补丁制作与补丁升级
    IPMI总结
  • 原文地址:https://www.cnblogs.com/sjqq/p/6611438.html
Copyright © 2011-2022 走看看