WPF中的TreeView,如何改变子节点的顺序, 给个例子,多谢
比如,A下面依顺序有B,C,D,E节点,希望将D移到B的下面,即显示顺序为B,D,C,E节点都还是A的子节点,没有变,只是在treeview中显示的顺序变化wpf里面貌似...
比如,A下面依顺序有B,C,D,E节点,希望将D移到B的下面,即显示顺序为B,D,C,E
节点都还是A的子节点,没有变,只是在treeview中显示的顺序变化
wpf里面貌似没有index,所有子节点的index都是-1
求例子~ 展开
节点都还是A的子节点,没有变,只是在treeview中显示的顺序变化
wpf里面貌似没有index,所有子节点的index都是-1
求例子~ 展开
2个回答
展开全部
非绑定的 情形像 winform, 不提.
下面说下 绑定时 的, 即
TreeView<---binding---> Collection (enumerable)
TreeView -binding-- Collection
Item 0 -------- [0]=B
item 1 -------- [1]=C
item 2 ------- [2]=D
item 3 ------- [3]=E
... .... ...
对於 Collection , 如果实现了 INotifyCollectionChanged interface, 你只需要改变 Collection 中 元素的顺序, TreeView 会 自动处理 呈现顺序 (即对数据源 data source 改变顺序)
如果 Collection 未实现 INotifyCollectionChanged, 则在改变 Collection 的元素的顺序後, 向 TreeView 发个通知, 要求更新 UI 即可.
下面说下 绑定时 的, 即
TreeView<---binding---> Collection (enumerable)
TreeView -binding-- Collection
Item 0 -------- [0]=B
item 1 -------- [1]=C
item 2 ------- [2]=D
item 3 ------- [3]=E
... .... ...
对於 Collection , 如果实现了 INotifyCollectionChanged interface, 你只需要改变 Collection 中 元素的顺序, TreeView 会 自动处理 呈现顺序 (即对数据源 data source 改变顺序)
如果 Collection 未实现 INotifyCollectionChanged, 则在改变 Collection 的元素的顺序後, 向 TreeView 发个通知, 要求更新 UI 即可.
更多追问追答
追问
已经实现了INotifyPropertyChanged接口
问题是,修改了里面的属性,treeview上的内容无变化(内存里已经发生变化)
如果重新加载datasource,内容的确是变化了,却会导致tree刷新,回到初始状态
如果用 treeview.items.refresh(),也会刷新整个视图,导致选择的节点复位,回到初始状态
如果解决这个问题,使之视图刷新后,选中节点焦点不丢失?
追答
INotifyPropertyChanged <---- Property
INotifyCollectionChanged <---- Collection
对于 CollectionChanged, 你 无需重新加载 datasource, 只需要 修改元素的顺序,
如 treeview 绑定了一个 col 的集合, 该集合已经实现 INotifyCollectionChanged, 则下面的代码会使 treeview 自动更新 ui:
tmp=o[2];
o[2]=o[3];
o[3]=tmp;
对于 选择的 (Selected) 节点:
1. 如果交换的(swapped) 的两项其中的一项 刚好是 当前选择的项 的话, 会导致 selectedIndex 变化至 -1, 因此, 在交换前可以将 treeview 的 selectedIndex 记录低, 交换后设置此属性.
2. 如果选择的项都不是 所交换的两项, 则不需要任何动作, treeview 不会改变 SelectedIndex.
展开全部
采用mvvm设计模式:两个treeview的Itemssource应该绑定各自的如ObservableCollcetion<DataClass>这样的集合。可以在DataClass中新增一个用于表示是否变灰的bool属性。在样式中使用触发器,当bool值为true,就变灰。然后当有个Treeview里面的Item添加到目的地列表中的时候,将该Item种的DataClass的是否变灰属性设置为true即可实现你要的功能。
记得DataClass实现接口INotifyPropertyChanged
其他人的回答你完全可以忽略了。因为其他人的回答把wpf程序硬是做成了winform。如果你用别人的方法,你的程序和winform做的,asp.net做的没啥区别了。也没有利用到wpf的特点。
记得DataClass实现接口INotifyPropertyChanged
其他人的回答你完全可以忽略了。因为其他人的回答把wpf程序硬是做成了winform。如果你用别人的方法,你的程序和winform做的,asp.net做的没啥区别了。也没有利用到wpf的特点。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询