属性发生变化时,通知另一个类中的属性?

时间:2015-12-11 14:36:40

标签: c# wpf

我有一个类,它是一个集合(MapAdapter),并将一个集合作为构造函数参数.MapAdater在CollectionChanged上添加一个Map对象:

public MapAdapter(UndoRedoCollection undoRedoCollection)
 {
    this.undoRedoCollection = undoRedoCollection;
    this.undoRedoCollection.CollectionChanged += this.OnCollectionChanged;
  }

这是我的集合更改事件,其中添加了Map对象:

   private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
   {
      GetMapRules(TurbineUndoRedoCollection);

   }

private void GetMapRules(UndoRedoCollection undoRedoCollection)
 {
    foreach (var item in undoRedoCollection)
    {
        this.Add(new Map(item));
       }
    }

我在MapAdapter上有一个属性,用于确定图层在地图上是否可见:

 public bool IsLayerVisible
        {
            get
            {
                return this.isLayerVisible;
            }

            set
            {
                this.isLayerVisible = value;
                this.OnPropertyChanged(new PropertyChangedEventArgs("IsLayerVisible"));
            }
        }

我的Map课程中有类似的属性。我需要收听IsLayerVisible上的MapAdapter媒体资源,并在IsLayerVisible集合中的每张地图上更改MapAdapter。原因是我有一个绘制图像并在Map中传递的控件,它对MapAdater一无所知,因此我无法控制何时&何时不根据能见度进行绘制。

2 个答案:

答案 0 :(得分:1)

如果您帖子的标题提供了关于您尝试执行的操作的任何线索,那么您需要做的就是实现INotifyPropertyChanged界面并触发PropertyChanged事件您的财产价值发生变化。

然后,修改Map的构造函数以接受MapAdapter实例。您不需要在MapAdapter内保留对Map的引用,只需使用它来针对PropertyChangedMapAdapter事件连接事件处理程序。

以下是Map类的外观示例......

public class Map
{
    public Map(object item, MapAdapter adapter)
    {
        ...
        adapter.PropertyChanged += this.AdapterPropertyChanged;
    }

    private void AdapterPropertyChanged(object sender, PropertyChangedEventArg e)
    {
        if (e.PropertyName == "IsLayerVisible")
        {
            // Do something
        }
    }
}

然后更新您的GetMapRules方法......

private void GetMapRules(UndoRedoCollection undoRedoCollection)
{
    foreach (var item in undoRedoCollection)
    {
        this.Add(new Map(item, this));
       }
    }
}

答案 1 :(得分:1)

查找pub-sub或Event Aggregator模式。

具体而言,Prism has an implementation可能是您感兴趣的。

link有一个独立的模式示例,也可能具有指导意义。