我有一个具有许多属性的对象。每次属性更改时,都会引发事件。对于性能问题,我希望在视图模型中订阅某些属性事件而不更改业务对象。
我知道我可以在事件处理程序中检查属性名称。但我不想走这条路,因为这是一项复杂的业务,有太多的属性。
有关更多说明,请假设我拥有具有这些属性的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 {...}}
...
}
答案 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。