我的程序中有一个TreeView
,需要从MVVM结构的数据模型级别实现。它需要以这种方式实现,这样程序才能将其保存在数据中。我的程序在不同的窗口之间切换,如果只有视图模型级别的深度,树就会在这些切换过程中丢失。我有数据工作,但这一观点没有回报(这个问题,我似乎有很多最近)。
我会在这里发布我的程序。请记住这个TreeView
的结构
-Usercontrol(包含TreeView)->视图模型->模型(TreeView需要存储在该模型中) -TreeView->ViewModel->Model
UserControl模型:
public BlockingTreeViewModel _blockDataTree;
public BlockingDatabaseModel() { }
public BlockingTreeViewModel BlockDataTree {...}
UserControl视图模型:
public BlockingDatabaseModel _blockingModel;
public BlockingDatabaseViewModel(BlockingDatabaseModel model, BlockingTreeViewModel blockingTreeView)
{
BlockingModel = model;
BlockingModel.BlockDataTree = blockingTreeView;
}
public BlockingDatabaseModel BlockingModel {...}
public BlockingTreeViewModel BlockingTree //PROXY PROPERTY
{
get { return BlockingModel.BlockDataTree; }
set
{
BlockingModel.BlockDataTree = value;
NotifyPropertyChange(() => BlockingTree);
}
}
UserControl.xaml:
<TreeView ItemsSource="{Binding BlockingModel.BlockDataTree.BlockTree}" ... />
现在,在添加到这个TreeView
时,我可以在调试时看到新节点,但是视图没有显示任何新创建的节点。据我对这种情况的理解,这是正确的,应该工作良好。请帮我解释为什么视图不会在UserControl中显示这棵树。
,既然上面的更改已经应用于我的xaml,那么树节点就会被创建和显示出来。但是,每当我更改屏幕时,这些节点就会消失。这意味着我的TreeView
在MVVM结构中仍然有问题。
*注意:TreeView
的属性是一个代理属性,因为它使我的代码在我的程序的其他领域变得更简单。不过,这不应影响我所做的工作。
更新1:
调试期间我的“本地”窗口的屏幕截图。这表明我能够在TreeView
中创建一个新节点。
更新2:更新绑定
发布于 2013-11-13 13:57:51
如果您正在切换包含TreeViews
的屏幕,则不应该每次查看TreeView
时都创建一个新的TreeView
,因为它将重置当前的TreeView
。
我这么说是因为每次我切换到ViewModel of my TreeView
时,我都在创建一个新的TreeView
。
我的TreeViewViewModel
的构造函数
public BlockingTreeViewModel()
{
BlockTree = new ObservableCollection<BlockingTreeModel>();
}
相反.:
//Pass the ObservableCollection from a different area of your code each time
//you use BlockingTreeViewModel so that you don't overwrite it.
public BlockingTreeViewModel(ObservableCollection<BlockingTreeModel> treeCollection)
{
BlockTree = treeCollection;
}
https://stackoverflow.com/questions/19933130
复制