2010-12-10 63 views
0

我正在用MVVM中的TreeView和Ria Services编写Silverlight 4应用程序以分层显示客户。 我不想从数据库加载所有客户,我想通过展开顶点来重新加载它们。有没有机会使用MVVM模式来做到这一点?Silverlight 4 MVVM TreeView控件

在数据库的客户模型中,存在“Parent_id”关系并且没有“child_id”!

非常感谢!

回答

1

是的,这是可能的。但是要知道,这是一个相当复杂的任务。

首先,你应该有以下属性的视图模型:

  • ID(用于接收parentId的childitems)
  • 标题(树形视图所示)
  • ChildItems(真实采集或空白项目)
  • IsExpanded
  • ISBLANK(如果这个产品子项,并且还没有加载)

开始时您有这些模型的列表,但集合ChildTtems应该由空白项组成。如果子项收集为空,则无法扩展父项。

下一步 - 绑定IsExpanded属性。您可以在this link上找到解决方案。

private bool isExpanded; 

    public bool IsExpanded 
    { 
     get { return isExpanded; } 
     set 
     { 
      isExpanded = value; 
      OnPropertyChanged("IsExpanded"); 
      if(isExpanded) 
       this.UpdateChildItems(); 
     } 
    } 

    public ObservableCollection<HierarchyViewModel> ChildItems { get; set; } 

    void UpdateChildItems() 
    { 
     //Check wheter the child items are blank (this.ChildItems.Any(ci=>ci.IsBlank)) 
     //and if answer is yes, receive real items from service, 
     //transform each of them to a viewmodel class and set IsBlank=false 
    } 

此外,你必须接受一些childitems每个项目和产生的空白项目的集合。

+0

非常感谢!但要小心,在Silverlight中,不可能在XAML中设置“IsExpanded”绑定。您必须继承TreeView和TreeViewItem类的硬编码绑定。 – Tom 2010-12-15 07:57:48