如何订阅某些属性事件

时间:2016-08-05 17:44:04

标签: c# events

我有一个具有许多属性的对象。每次属性更改时,都会引发事件。对于性能问题,我希望在视图模型中订阅某些属性事件而不更改业务对象。

我知道我可以在事件处理程序中检查属性名称。但我不想走这条路,因为这是一项复杂的业务,有太多的属性。

有关更多说明,请假设我拥有具有这些属性的Car类。 我想听听房产A,D,G的事件,我想忽略其余的事情。

谢谢

class Car : INotifyPropertyChanged
{
 public string A {get {...} set {...}}
 public string B {get {...} set {...}}
 public string C {get {...} set {...}}
 public string D {get {...} set {...}}
 public int E {get {...} set {...}}
 public int F {get {...} set {...}}
 public int G {get {...} set {...}}

 ...
}

1 个答案:

答案 0 :(得分:1)

如果您希望事件处理程序仅处理一个属性,那么只让它处理一个属性。您可以多次订阅属性更改事件

public class Example
{
    private readonly Car _car;
    public Example(Car car)
    {
        _car = car;
        _car.PropertyChanged += HandleA;
        _car.PropertyChanged += HandleD;
        _car.PropertyChanged += HandleG;
    }

    private void HandleA(object sender, PropertyChangedEventArgs args)
    {
        if(args.PropertyName == "A" || String.IsNullOrEmpty(args.PropertyName))
        {
            //Do logic for A
        }
    }

    private void HandleD(object sender, PropertyChangedEventArgs args)
    {
        if(args.PropertyName == "D" || String.IsNullOrEmpty(args.PropertyName))
        {
            //Do logic for D
        }
    }

    private void HandleG(object sender, PropertyChangedEventArgs args)
    {
        if(args.PropertyName == "G" || String.IsNullOrEmpty(args.PropertyName))
        {
            //Do logic for G
        }
    }
}

IsNullOrEmpty次检查是因为a null or empty property name means all properties where updated