2015-12-11 49 views
0

我有一类是一个集合(MapAdapter),并采取了集合作为.MapAdater增加了对CollectionChanged一个Map对象的构造参数:当财产发生变化时,通知另一个类中的财产?

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

这是被添加在地图对象我的收藏更改事件:

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课上有类似的房产。我需要听我的MapAdapter上的IsLayerVisible属性,并在MapAdapter集合内的每个地图上更改IsLayerVisible。原因是我有一个控制器绘制图像并通过Map,它对MapAdater一无所知,因此我无法控制什么时候根据可见性不能绘制图像。

+0

那么有什么不适合你? –

回答

1

如果您的帖子的标题提供了您正在尝试执行的任何线索,那么您只需实现INotifyPropertyChanged界面,并在属性值发生更改时触发PropertyChanged事件。

然后,修改您的Map构造函数以接受MapAdapter实例。您无需在Map范围内参考MapAdapter,只需使用它将PropertyChanged事件的事件处理程序与MapAdapter连接。

这里的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)); 
     } 
    } 
} 
+0

INPC在MapAdapter中实现,我在IsLayerVisible的setter上调用PropertyChanged。我试图在Map类中使用PropertyChangedEventManager,但Map类没有MapAdapter实例的知识,因此我无法听到它? PropertyChangedEventManager.AddListener(?,this,“IsLayerVisible”); – Hardgraf

+1

您可以在构造函数中将MapAdapter的引用传递给Map吗? – Randy

1

查找发布 - 订阅或事件聚合器模式。

具体来说,Prism has an implementation可能是有趣的。

这个link有一个这种模式的独立的例子,也可能有启发性。