可观察集合不使用silverlight子窗口更新树视图

时间:2011-12-15 11:18:41

标签: c# silverlight

我的silverlight树视图存在问题,该视图与可观察的集合绑定。除了我尝试编辑树视图中的现有项目时,树视图绑定在所有操作中都能正常工作,我在其中弹出一个新的子窗口并将treemanager对象传递给它。 Treemanager本质上是一个维护我的可观察集合的自定义类。代码更新了observable集合中的底层项目,好像它似乎有一个指向treemanager对象的指针,但它不会更新treeview,即使我特意告诉它重新绑定到obervable集合。

右键点击代码:

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; }
    }
}

2 个答案:

答案 0 :(得分:1)

TreeManager类未实现INotifyPropertyChanged接口。因此,标题中的更改不会传播到绑定和用户界面。

答案 1 :(得分:0)

Observable collection实现了INotifyCollectionChanged,仅针对:

引发
  

///在添加,删除,更改,移动或移动项目时发生   整个列表是公共虚拟事件   NotifyCollectionChangedEventHandler CollectionChanged;

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