我有一个问题,我的silverlight treeview绑定到一个可观察集合。除了当我尝试编辑树视图中的现有项目时,我弹出一个新的子窗口并将treemanager对象传递给它之外,树视图绑定在所有操作中都能完美地工作。Treemanager本质上是一个维护可观察对象集合的自定义类。代码更新了可观察对象集合中的基础项,就好像它似乎有一个指向treemanager对象的指针,但它不会更新treeview,即使我特别告诉它重新绑定到可观察对象集合。
右键代码:
TreeViewItem treeItem = this.RCM.GetClickedElement<TreeViewItem>();// as TreeViewItem;
TreeManager treeManager = ((TreeManager)(((HeaderedItemsControl)(treeItem)).Header));
if (treeManager.Type != "diObject")
{
Message.ErrorMessage("Please select the root DiObject to edit");
return;
}
EditWindow editdlg = new EditWindow(DiObjectNameToList(treeManager), driverComboItems, deviceIntTypeComboItems);
editdlg.Title = "Edit DIObject - "+treeManager.Title;
editdlg.Closed += new EventHandler(editdlg_Closed);
editdlg.t_orig = treeManager;
editdlg.t = treeManager;
editdlg.Show();
子视图窗口:
public partial class EditWindow : ChildWindow
{
Dictionary<string, string> diObject;
String[] driverComboItems;
String[] deviceIntTypeComboItems;
public TreeManager t { get; set; }
public TreeManager t_orig { get; set; }
public EditWindow(Dictionary<string, string> _diObject, String[] _driverComboItems, String[] _deviceIntTypeComboItems)
{..}
}
treeManager类:
public class TreeManager
{
public TreeManager() { }
public TreeManager(string title)
{
Title = title;
}
public string Title { get; set; }
public ObservableCollection<TreeManager> childElementsValue = new ObservableCollection<TreeManager>();
public ObservableCollection<TreeManager> ChildElements
{
get { return childElementsValue; }
set { childElementsValue = value; }
}
}
TreeManager类不实现INotifyPropertyChanged接口。因此,Title中的更改不会传播到绑定和用户界面。
Observable collection实现了INotifyCollectionChanged,并且只在以下情况下引发:
///当添加、删除、更改、移动或删除项时发生整个列表是公共虚拟事件NotifyCollectionChangedEventHandler CollectionChanged;
当你直接分配时,你正在创建一个完整的新列表,因此没有通知。