我有一个TreeView。我有一个为TreeViewItems定义的contextMenu。新增项目被添加到集合中,但不包含在treeViewItems中
当我右键点击任何TreeViewItem,我得到一个ContextMenu,它有一个选项,添加一个新的TreeViewItem下用户右键单击的项目。
这里是我的代码:
private void AddContextMenu_Click(object sender, RoutedEventArgs e)
{
TreeViewItem treeViewItem = null;
foreach (TreeViewItem tvItem in StaticHelpers.FindVisualChildren<TreeViewItem>(cityTreeView))
{
if (tvItem.Header == ServiceLocator.Instance.SelectedCity)
{
treeViewItem = tvItem;
break;
}
}
AddNewCity(ServiceLocator.Instance.SelectedCity);
treeViewItem.IsExpanded = true;
City newlyAddedCity = getNewlyAddedCity(ServiceLocator.Instance.Cities);
foreach (TreeViewItem tvItem in StaticHelpers.FindVisualChildren<TreeViewItem>(cityTreeView))
{
if (tvItem.Header == newlyAddedCity)
{
treeViewItem = tvItem;
break;
}
}
this.RenameContextMenu_Click(treeViewItem, e);
}
在上面的代码
现在,如果我继续过去的foreach循环断点,我可以看到,它遍历所有的父项和这些子项的父的IsExpanded是设置为true。
但我也可以注意到,当它循环遍历所有项目时,它不会在集合中获得newAddedCity,并因此导致第二个循环tvItem.Header == newlyAddedCity永远不会变为true。
最后,当计算机完成任务后,我可以在TreeView中看到新增的城市。
更新:
这里是我的AddNewCity方法:
public static void AddNewCity(City parentCity)
{
City lastAddedCity = ServiceLocator.Instance.Cities.Where(x => x.IsLastAdded == true).Select(x => x).FirstOrDefault();
lastAddedCity.IsLastAdded = false;
City newCity = new City()
{
Id = lastAddedCity.Id + 1,
IsLastAdded = true,
Name = "New City"
};
ServiceLocator.Instance.Cities.Where(x => x.Id == parentCity.Id).FirstOrDefault().Children.Add(newCity);
CityMethods.SaveNew(parentCity.Id, "");
}
因此,你的问题只是你不能打断点或面临一些问题添加对象到treeView? – 2014-10-04 09:33:20
是的,上面的代码只是没有达到断点。不,我没有面临任何向treeView添加对象的问题。 – Vishal 2014-10-04 09:34:47