提前感谢您的帮助。第一次在这里发帖。
我已经包含了一些示例代码。我想基于这些自定义对象(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个)
答案 0 :(得分:1)
好的,我明白了。谢谢你的指导。这是新的MyApplication类。在示例中,我没有任何数据,但如果您需要查看此工作,则可以填写该数据。它只是一个示例框架。
class MyApplication
{
ObservableCollection<Team> _Teams = new ObservableCollection<Team>();
ContextMenu _TeritorySwitcher = new ContextMenu();
public MyApplication()
{
}
public void AddTeam()
{
_Teams.Add(new Team());
_Teams.Add(new Team());
_Teams.Add(new Team());
_Teams.Add(new Team());
foreach (Team t in _Teams)
{
t.Territories.Add(new Territory());
t.Territories.Add(new Territory());
t.Territories.Add(new Territory());
}
SetContextMenu();
}
private void SetContextMenu()
{
HierarchicalDataTemplate _hdtTerritories = new HierarchicalDataTemplate();
_hdtTerritories.DataType = typeof(Territory);
HierarchicalDataTemplate _hdtTeams = new HierarchicalDataTemplate();
_hdtTeams.DataType = typeof(Team);
FrameworkElementFactory _TeamFactory = new FrameworkElementFactory(typeof(TreeViewItem));
_TeamFactory.Name = "txtTeamInfo";
_TeamFactory.SetBinding(TreeViewItem.HeaderProperty, new Binding("TeamProperty1"));
FrameworkElementFactory _TerritoryFactory = new FrameworkElementFactory(typeof(TreeViewItem));
_TerritoryFactory.Name = "txtTerritoryInfo";
_TerritoryFactory.SetBinding(TreeViewItem.HeaderProperty, new Binding("TerritoryProperty1"));
_hdtTeams.ItemsSource = new Binding("Territories");
_hdtTeams.VisualTree = _TeamFactory;
_hdtTerritories.VisualTree = _TerritoryFactory;
_hdtTeams.ItemTemplate = _hdtTerritories;
_TeritorySwitcher.ItemTemplate = _hdtTeams;
_TeritorySwitcher.ItemsSource = this._Teams;
}
}