我的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; }
}
}
答案 0 :(得分:1)
TreeManager类未实现INotifyPropertyChanged接口。因此,标题中的更改不会传播到绑定和用户界面。
答案 1 :(得分:0)
Observable collection实现了INotifyCollectionChanged,仅针对:
引发///在添加,删除,更改,移动或移动项目时发生 整个列表是公共虚拟事件 NotifyCollectionChangedEventHandler CollectionChanged;
当您直接分配时,您正在创建一个完整的新列表,因此没有通知。