C# 在树视图中上下移动节点
在我的程序中,我有一个UserControl,它包含一个C# 在树视图中上下移动节点,c#,wpf,treeview,observablecollection,C#,Wpf,Treeview,Observablecollection,在我的程序中,我有一个UserControl,它包含一个TreeView。TreeView有一个ViewModel和一个与之相关的模型。我希望通过单击按钮,可以在整个树中上下移动节点。这与在列表框上实现的类似 作为指导,我正在使用 我正在将以下函数实现到用户控件的代码隐藏中,TreeView //Move up private void moveUp_Click(object sender, RoutedEventArgs e) { if(UCViewModel.TreeView.Se
TreeView
。TreeView
有一个ViewModel和一个与之相关的模型。我希望通过单击按钮,可以在整个树中上下移动节点。这与在列表框上实现的类似
作为指导,我正在使用
我正在将以下函数实现到用户控件的代码隐藏中,TreeView
//Move up
private void moveUp_Click(object sender, RoutedEventArgs e)
{
if(UCViewModel.TreeView.SelectedItem != null)
{
if(UCViewModel.TreeView.SelectedItem is TreeModel)
{
TreeModel tm = UCViewModel.TreeView.SelectedItem as TreeModel;
if(tm.Rank != 1)
{
}
}
}
}
private void MoveUp(TreeModel tm)
{ //My guess on how to call the equivalent command...
foreach (TreeModel item in // **UCViewModel.TreeView.GetAllChildren....? )
{
}
}
因为我的结构不同,而且我实际上是以TreeView
的形式实现一个observeCollection
,所以我无法访问与示例中的代码相同的方法
以下几行是我关心的几行
TreeView.Items()代码>
TreeView.Items.Clear()代码>
TreeView.Items.Add()代码>
如何使用我的TreeView
设置方式进行等效调用?请告诉我更多的代码是否有用。MVVM的主要思想是不使用类似treeView.Items.Add()或treeView.GetAllChildren()或treeView中需要的任何方法
MVVM模式表示您不关心视图,也不知道视图或视图中的任何控件
因此,如果您的ViewModel中有一个ObservableCollection作为ItemsSource,您只需要将项目移动到那里,TreeView就会跟随您
就这么简单。您的TreeView只需要知道ObservableCollection在ViewModel中的位置
无论何时在ObservableCollection中更改某些内容,都会触发collection changed事件,并使用适当的事件参数保存信息,无论您是添加了新项还是移动了项。这就是TreeView知道该做什么的方式。+1。另外,当我开始在WPF中使用TreeView
s时,我发现这篇文章非常有用:这是一个很好的解释,谢谢。我最后查看了observeablecollection.Move()代码>--