我正在使用TreeView和自定义详细信息视图控件在我的应用程序中实现主/细节视图。我也试图坚持MVVM模式。使用TreeView的主/详细视图
现在,TreeView被绑定到包含所有细节的视图模型对象集合,并且细节视图绑定到TreeView的选定项目。
这很好...直到其中一个TreeView节点有5,000个孩子,并且应用程序突然占用了500MB的RAM。
主窗口视图模型:
public class MainWindowViewModel
{
private readonly List<ItemViewModel> rootItems;
public List<ItemViewModel> RootItems { get { return rootItems; } } // TreeView is bound to this property.
public MainWindowViewModel()
{
rootItems = GetRootItems();
}
// ...
}
项目视图模型:
public ItemViewModel
{
private readonly ModelItem item; // Has a TON of properties
private readonly List<ItemViewModel> children;
public List<ItemViewModel> Children { get { return children; } }
// ...
}
这里的细节如何,我结合查看:
<View:ItemDetails DataContext="{Binding SelectedItem, ElementName=ItemTreeView}" />
我是相当新的WPF和MVVM模式,但是我想将TreeView绑定到一个更小,更简单的对象的集合看起来很浪费,具有显示该项目所需的属性(如名称和ID),然后一旦选择了它,所有的细节都会被加载。我会如何去做这样的事情?