• WPF:数据绑定--PropertyChangeNotification属性更改通知


     

     

    PropertyChangeNotification属性更改通知

    实现效果:
    1.拍卖金额自动随属性值变化而通知界面绑定的值变化。

    clipboard.png

    clipboard.png
    关键词 :

    1. INotifyPropertyChanged
    2. ObservableCollection<T>

    界面xaml:
    数据模板

    <DataTemplate x:Key="BidItemDataTemplate">
        <Canvas Width="300" Height="20">
            <TextBlock FontSize="14" Foreground="DarkSlateGray"
      Width="180" Canvas.Left="0" Text="{Binding Path=BidItemName}"/>
            <TextBlock FontSize="14" Foreground="DarkSlateBlue"
      Text="$" Canvas.Left="180"/>
            <TextBlock FontSize="14" Foreground="DarkSlateBlue"
      Width="80" Canvas.Left="190" Text="{Binding Path=BidItemPrice}"/>
        </Canvas>
    </DataTemplate>
    <ItemsControl Name="MyListBox" DockPanel.Dock="Top" Background="Silver"
         Width="315" Height="80"
         ItemsSource="{Binding Source={StaticResource MyDataSource}}"
         ItemTemplate="{StaticResource BidItemDataTemplate}"/>

    后台代码:
    数据类,显示其中的一个属性更通知:

    public decimal BidItemPrice
    {
        get { return _biditemprice; }
        set
        {
            if (_biditemprice.Equals(value) == false)
            {
                _biditemprice = value;
                // Call OnPropertyChanged whenever the property is updated
                OnPropertyChanged("BidItemPrice");
            }
        }
    }

    具体业务代码:
    初始化类时执行每隔一段时间,更新属性的值,然后作为绑定源反映到界面数值变动。

    public class BidCollection : ObservableCollection<Bid>
    {
        private readonly Bid _item1 = new Bid("Perseus Vase", (decimal) 24.95);
        private readonly Bid _item2 = new Bid("Hercules Statue", (decimal) 16.05);
        private readonly Bid _item3 = new Bid("Odysseus Painting", (decimal) 100.0);
    
        public BidCollection()
        {
            Add(_item1);
            Add(_item2);
            Add(_item3);
            CreateTimer();
        }
    
        private void Timer1_Elapsed(object sender, ElapsedEventArgs e)
        {
            _item1.BidItemPrice += (decimal) 1.25;
            _item2.BidItemPrice += (decimal) 2.45;
            _item3.BidItemPrice += (decimal) 10.55;
        }
    
        private void CreateTimer()
        {
            var timer1 = new Timer
            {
                Enabled = true,
                Interval = 2000
            };
            timer1.Elapsed += Timer1_Elapsed;
        }
    }

    扩展:

    1. 设置 Enabled 到 true 等同于调用 Start, ,而设置 Enabled 到 false 等同于调用 Stop。
    2. 如果 Enabled 设置为 true 和 AutoReset 设置为 false, ,则 Timer 引发 Elapsed 事件仅当第一次间隔到期。
    3. 要引发的信号 Elapsed 事件总是在排队等待执行 ThreadPool 线程。 这可能会导致 Elapsed 后引发事件 Enabled 属性设置为 false。??
  • 相关阅读:
    [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
    Welcome to Anvet Blogs
    法语笔记
    min-max容斥略解
    求和与和式界的估计
    浅谈虚树
    浅谈随机数的生成
    莫比乌斯反演与狄利克雷卷积
    傅里叶变换三部曲(二)·傅里叶变换的定义
    傅里叶变换三部曲(一)·傅里叶级数
  • 原文地址:https://www.cnblogs.com/Jeely/p/11075991.html
Copyright © 2020-2023  润新知