我已经嵌套 ObsevableCollections ,如下所示。出于简单的原因,这是我想要完成的示例代码。
示例应用程序包含 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"));
}
}
}
包含 ObservableCollection 区域对象
的团队对象 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
}
}
就本例而言,我分配了一个值,但在我的实际代码中,我从其他方式获得了对象 t 。 t 是团队内部和对象的 ObservableCollection 中的对象类型。
public void SomeWork()
{
Territory t = _Teams[1].Territories[0];
SomeMoreWork(t);
}
我正在从一个团队中移除一个区域并将其添加到另一个团队。像下面这样的东西。我如何获得该领土所属的Team对象?
public void SomeMoreWork(Territory t)
{
Team _Team = ( Parent of t? );
_Team.Territories.Remove(t);
_Teams[0].Territories.Add(t);
}
答案 0 :(得分:2)
在MyApplication2中,linq查询如下:
var TeamsOwnTTerritory = from team in _Teams
where team.Territories.Contains(t)
select team
将为您提供具有该领域的团队列表。
Rq:到目前为止,您的代码无法确保多个团队不拥有相同的区域。
答案 1 :(得分: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));