可观察集合没有使用silverlight子窗口更新treeview



我有一个问题,我的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;

当你直接分配时,你正在创建一个完整的新列表,因此没有通知。

最新更新