在我的程序中,我有一个包含TreeView
的UserControl。 TreeView
有一个ViewModel和一个与之相关的模型。我想这样做,通过点击按钮,我可以在整个树上上下移动节点。这类似于listBox
上可能实现的内容。
作为指南,我使用this article。
我将以下函数实现到TreeView
存在的UserControl的代码隐藏中。
//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....? )
{
}
}
因为我的结构不同,而我实际上将ObservableCollection
实现为TreeView
,所以我无法访问与示例中的代码相同的方法。
以下几行是我关注的......
TreeView.Items();
TreeView.Items.Clear();
TreeView.Items.Add();
如何以TreeView
设置的方式进行等效调用?如果有更多代码可以提供帮助,请告诉我。
答案 0 :(得分:1)
MVVM的主要思想不是使用treeView.Items.Add()或treeView.GetAllChildren()或TreeView所需的任何方法。
MVVM Pattern表示你不关心View,你不了解View中的View或任何控件。
因此,如果您在ViewModel中有一个ObservableCollection作为ItemsSource,您只需要在那里移动项目,TreeView将跟随您。
就这么简单。您的TreeView只需要知道ObservableCollection在ViewModel中的位置。
无论何时在ObservableCollection中更改某些内容,都会触发集合已更改事件,并使用适当的事件参数保存信息,无论您是添加新项目还是已移动项目。这就是TreeView将如何做的事情。