Silverlight 4 MVVM TreeView 控件

发布于 2024-10-06 23:25:27 字数 184 浏览 4 评论 0原文

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

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

多谢!

Im writing a Silverlight 4 App with a TreeView and Ria Services in MVVM to display customers hierarchically.
I dont want to load all customers from database, I want to reload them by expanding a vertex instead. Is there a chance to do this using MVVM Pattern?

Within database's customers model, there is an "Parent_id" relationship and no "child_id"!

Thanks a lot!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

同尘 2024-10-13 23:25:27

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

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

  • Id(用于通过parentId接收子项目)
  • Title(在树视图中显示)
  • ChildItems(真实集合或空白项目)
  • IsExpanded
  • IsBlank(如果该项目是子项目并且不是子项目)尚未加载)

一开始您有这些模型的列表,但 ChildTtems 集合应包含空白项。如果子项目集合为空 - 您将无法展开父项目。

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

    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
    }

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

Yes, it is possible. But be informed that it is a comlicated task.

At first, you should have a viewmodel with the following properties:

  • Id (used for receiving childitems by parentId)
  • Title (shown in the treeview)
  • ChildItems (real collection or blank items)
  • IsExpanded
  • IsBlank (if this item is child item and isn't loaded yet)

At the beginning you have a list of these models, but collection ChildTtems should consist of blank items. If childitems collection is empty - you will not be able to expand a parent item.

Next step - bind IsExpanded property. You can find solution on 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
    }

Also, you have to receive a number of childitems for each item and generate collection of blank items.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文