미리 도움을 청하십시오. 처음 여기에 게시했습니다.중첩 ObservableCollection을 사용하여 ContextMenu WPF 창 만들기
샘플 코드가 약간 포함되어 있습니다. 이러한 사용자 지정 개체 (ObservableCollection)를 기반으로 ContextMenu를 동적으로 작성하고 싶습니다. ContextMenu를 Team의 첫 번째 레벨에 바인딩 할 수 있지만 두 번째 레벨 인 "ContextMenu?/MenuItem?"도 바인딩 할 수 있습니까? 영토를 위해. 팀이 강조 표시되면 팀의 영역을 볼 필요가 있습니다.
내 팀 개체
class Team
{
private int _TeamProperty1 = 0;
private int _TeamProperty2 = 0;
ObservableCollection<Territory> _Territories = new ObservableCollection<Territory>();
public Team()
{
}
public ObservableCollection<Territory> Territories
{
get { return _Territories; }
set { _Territories = value; }
}
public int TeamProperty1
{
get { return _TeamProperty1; }
set { _TeamProperty1 = value; }
}
public int TeamProperty2
{
get { return _TeamProperty2; }
set { _TeamProperty2 = value; }
}
}
내 지역 개체
class Territory
{
private int _TerritoryProperty1 = 0;
public int TerritoryProperty1
{
get { return _TerritoryProperty1; }
set { _TerritoryProperty1 = value; }
}
public void Method1()
{
//Do Some Work
}
}
응용 프로그램
class MyApplication
{
ObservableCollection<Team> _Teams = new ObservableCollection<Team>();
ContextMenu _TeritorySwitcher = new ContextMenu();
public MyApplication()
{
AddTeam()
}
public void AddTeam()
{
Team _Team1 = new Team();
_Team1.Territories.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Territories_CollectionChanged);
_Teams.Add(_Team1);
Team _Team2 = new Team();
_Team2.Territories.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Territories_CollectionChanged);
_Teams.Add(_Team2);
Team _Team3 = new Team();
_Team3.Territories.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Territories_CollectionChanged);
_Teams.Add(_Team3);
foreach (Team t in _Teams)
{
t.Territories.Add(new Territory());
t.Territories.Add(new Territory());
t.Territories.Add(new Territory());
t.Territories.Add(new Territory());
}
}
void Territories_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
ObservableCollection<Team> _TeamsSort = new ObservableCollection<Team>(_Teams.OrderBy(tm => tm.TeamProperty1));
_TeritorySwitcher.ItemsSource = _TeamsSort;
_TeritorySwitcher.DisplayMemberPath = "TeamProperty2";
}
}
이제 내의 ContextMenu 팀 (중 3)를 보여줍니다,하지만 난 알아낼 수 없습니다 각 영토를 표시하는 방법을 알아 내십시오 (각 팀마다 4 개가 있어야 함)