【问题标题】:Silverlight 4 MVVM TreeView ControlSilverlight 4 MVVM 树视图控件
【发布时间】:2010-12-10 07:53:36
【问题描述】:

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

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

非常感谢!

【问题讨论】:

    标签: silverlight mvvm treeview reload


    【解决方案1】:

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

    首先,您应该有一个具有以下属性的视图模型:

    • Id(用于通过parentId接收子项)
    • 标题(在树视图中显示)
    • ChildItems(真实收藏或空白项目)
    • 已扩展
    • 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
        }
    

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

    【讨论】:

    • 非常感谢!但请注意,在 Silverlight 的 XAML 中无法设置“IsExpanded”绑定。您必须对 TreeView 和 TreeViewItem 类进行子类化,并对绑定进行硬编码。
    • 是的,有派生类是必须的,但是没有问题,因为这个类有相同的属性,可以用相同的方式设置样式。
    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2011-05-12
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多