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。??
原文地址:https://www.cnblogs.com/Jeely/p/11075991.html