Wpf addedeventargs如何为mvvm工作?

Wpf addedeventargs如何为mvvm工作?,wpf,mvvm-light,Wpf,Mvvm Light,如果你有一段我在我的一个老项目中找到的代码。我只是不明白为什么我会把这个包括在内 public void AddParking(Parking parking) { if (allParkings == null) { allParkings = new ObservableCollection<Parking>(); } allParkings.Add(parking);

如果你有一段我在我的一个老项目中找到的代码。我只是不明白为什么我会把这个包括在内

public void AddParking(Parking parking)
    {
        if (allParkings == null)
        {
            allParkings = new ObservableCollection<Parking>();
        } 
        allParkings.Add(parking);

        if (ParkingAddedEvent != null)
        {
            ParkingAddedEvent(this, new ParkingAddedEventArgs(parking));
        }
    }
公共停车场(停车场)
{
如果(所有停车位==null)
{
allParkings=新的可观察集合();
} 
所有停车场。添加(停车场);
如果(驻车辅助开发!=null)
{
ParkingAddedEvent(这是新的ParkingAddedEventArgs(停车));
}
}
这个在我的ParkingRepository类中,它在model文件夹中。我正在使用mvvm light工具包。我只是想知道这个应用程序有什么功能


为了清楚起见,我正在讨论第二个if语句,它带有ParkingAddedEvent。

首先检查ParkingAddedEvent是否有任何事件侦听器,如果有,您将引发该事件。此事件的效果取决于侦听器

这里的实现不是线程安全的。以下是线程安全的替代方案:

var handler = ParkingAddedEvent;
Thread.MemoryBarrier();
if (handler != null) {
    handler(this, new ParkingAddedEventArgs(parking));
}
我使用
Thread.MemoryBarrier()
来防止可能消除局部变量的编译器优化。如果发生这种情况,代码将与您当前的实现相同


集合初始值设定项还存在另一个线程安全问题,但这只是在从不同线程调用
AddParking()
方法时出现的问题。

首先检查ParkingAddDevent是否有任何事件侦听器,如果有,将引发事件。此事件的效果取决于侦听器

这里的实现不是线程安全的。以下是线程安全的替代方案:

var handler = ParkingAddedEvent;
Thread.MemoryBarrier();
if (handler != null) {
    handler(this, new ParkingAddedEventArgs(parking));
}
我使用
Thread.MemoryBarrier()
来防止可能消除局部变量的编译器优化。如果发生这种情况,代码将与您当前的实现相同

集合初始值设定项还存在另一个线程安全问题,但这只是从不同线程调用
AddParking()
方法时的问题