Silverlight 4 MVVM TreeView控件

时间:2010-12-10 07:53:37

标签: silverlight mvvm treeview reload

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

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

是的,有可能。但请注意,这是一项复杂的任务。

首先,您应该拥有一个具有以下属性的viewmodel:

  • Id(用于通过parentId接收子项)
  • 标题(显示在树视图中)
  • ChildItems(真实收藏或空白项目)
  • IsExpanded
  • IsBlank(如果此项目是子项目但尚未加载)

一开始你有一个这些模型的列表,但集合ChildTtems应该由空白项组成。如果childitems集合为空 - 您将无法展开父项。

下一步 - 绑定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
    }

此外,您必须为每个项目收到许多子项,并生成空白项目集合。