在WPF中检索对象父容器对象

时间:2011-12-05 23:37:55

标签: wpf object parent observablecollection

我已经嵌套 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);
        }

2 个答案:

答案 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));