2011-12-05 29 views
0

我嵌套ObsevableCollections如下所示。出於簡單的原因,這是我試圖完成的示例代碼。檢索WPF中的對象父容器對象

示例應用程序的包含的ObservableCollection組包含一個的ObservableCollection領土對象

class MyApplication2 
    { 
     ObservableCollection<Team> _Teams = new ObservableCollection<Team>(); 
     public MyApplication2() 
     { 
      _Teams.Add(new Team("Team1")); 
      _Teams.Add(new Team("Team2")); 
      _Teams.Add(new Team("Team3")); 

      foreach (Team t in _Teams) 
      { 
       t.Territories.Add(new Territory("Territory1")); 
       t.Territories.Add(new Territory("Territory2")); 
       t.Territories.Add(new Territory("Territory3")); 
      } 
     } 
    } 

隊對象

class Team 
    { 
     private string _TeamName = ""; 
     private int _TeamProperty1 = 0; 
     ObservableCollection<Territory> _Territories = new ObservableCollection<Territory>(); 

     public Team(string tName) 
     { 
      this.TeamName = tName; 
     } 

     public ObservableCollection<Territory> Territories 
     { 
      get { return _Territories; } 
      set { _Territories = value; } 
     } 

     public string TeamName 
     { 
      get { return _TeamName; } 
      set { _TeamName = value; } 
     } 

     public int TeamProperty1 
     { 
      get { return _TeamProperty1; } 
      set { _TeamProperty1 = value; } 
     } 

    } 

領土對象

class Territory 
    { 
     private string _TerritoryName = ""; 

     public Territory(string tName) 
     { 
      this.TerritoryName = tName; 
     } 

     public string TerritoryName 
     { 
      get { return _TerritoryName; } 
      set { _TerritoryName = value; } 
     } 

     public void Method1() 
     { 
      //Do Some Work 
     } 
    } 

只是爲了這個例子我分配了一個值,但在我的真實代碼中,我有一些其他方法的對象tt是一個對象類型的領土,在ObservableCollection的領土內部和團隊的對象。

 public void SomeWork() 
     { 
      Territory t = _Teams[1].Territories[0]; 
      SomeMoreWork(t); 
     } 

我從1個團隊中刪除領土並將其添加到另一個團隊。像下面這樣。我如何得到Team對象屬於哪個領域?

 public void SomeMoreWork(Territory t) 
     { 
      Team _Team = (Parent of t?); 
      _Team.Territories.Remove(t); 
      _Teams[0].Territories.Add(t); 
     } 
+2

的構造我認爲最好的辦法是添加數據成員,它與相應的團隊對象相關聯的區域類中。 –

回答

0

謝謝您的信息Vincent Piel

謝謝你的想法Saad Imran

我改變了以下內容,並將一個AssociatedTeam添加到我的疆域對象並將其設置在consructor中。到目前爲止,它似乎做我要找的東西。

class Territory 
    { 
     private string _TerritoryName = ""; 
     Team _AssociatedTeam = null; 

     public Territory(string tName, Team team) 
     { 
      this.TerritoryName = tName; 
      this.AssociatedTeam = team; 
     } 

     public Team AssociatedTeam 
     { 
      get { return _AssociatedTeam; } 
      set { _AssociatedTeam = value; } 
     } 

     public string TerritoryName 
     { 
      get { return _TerritoryName; } 
      set { _TerritoryName = value; } 
     } 


     public void Method1() 
     { 
      //Do Some Work 
     } 
    } 

,然後改變領土的啓動在所有MyApplication

 t.Territories.Add(new Territory("Territory1", t)); 
     t.Territories.Add(new Territory("Territory2", t)); 
     t.Territories.Add(new Territory("Territory3", t)); 
2

在MyApplication2 LINQ查詢,如:

var TeamsOwnTTerritory = from team in _Teams 
         where team.Territories.Contains(t) 
         select team 

將爲您帶來具有的T領土隊的名單。

Rq:到目前爲止,您的代碼沒有確保幾個團隊不擁有相同的領土。

+0

而且我會加入到我的答案中:沒有任何對象有任何意義知道它屬於哪個其他對象。爲了獲得這種意識(例如知道是否有人使用某個對象的垃圾回收器,或其他示例中的UIElements及其VisualParents),該對象必須做更多的工作。在你的例子中,你可以管理一個地區的「池」,以確保只有一個團隊擁有一個領土,並讓每個領土都知道它的所有者。 – GameAlchemist

+0

這很有道理。謝謝(你的)信息。我想我想出了一個方法來完成這項工作。我會稍微發表一篇文章。 – Jmyster

+0

這可能意味着我'回答'你的問題,隊友:=) – GameAlchemist