【问题标题】:Binding a class to a WPF Treeview将类绑定到 WPF 树视图
【发布时间】:2011-06-27 14:09:14
【问题描述】:

我有一个对象,它包含一个可观察的集合 我试图围绕如何将这一切都粘贴到树视图中。 因此,主要对象将是父对象,而可观察集合中的项目是子对象。 目前,该类具有可以绑定到标头的公共字符串属性。 以下是课程的部分内容:

public class ServerObject : INotifyPropertyChanged
{
    private string _serverName;
    ObservableCollection<string> _instanceList;

    public ObservableCollection<string> InstanceList
    {
        get { return _instanceList; }
    }

    public string ServerName
    {
        get { return _serverName; }
        set
        {
            _serverName = value;
            RaisePropertyChanged("ServerName");
        }
    }

    public ServerObject(string name, string version)
    {

        ServerName = name;
        _instanceList = new ObservableCollection<string>();
    }
}

提前致谢。

【问题讨论】:

    标签: c# wpf treeview


    【解决方案1】:

    最简单的方法是使用 HierarchicalDataTemplates。定义两个或更多模板。在模板声明行中,为您的对象添加一个类型指示符。另外,添加一个指向下一层的 ItemsSource 属性。

    <HierarchicalDataTemplate Datatype="{x:Type local:mySerberObject}" ItemsSource="{Binding InstanceList}"/>
    

    将顶级集合绑定到树视图,您应该可以关闭并运行。根据您的喜好设置数据模板的样式。

    如果您目前正在使用 MVVM(或者如果您打算开始使用它),请查看下面的链接以获取有关 using the treeview with MVVM 的非常好的文章。

    【讨论】:

    • 没有意识到我必须绑定到顶层,这解释了我做错了什么。我绑定到服务列表。谢谢
    • HierarchicalDataTemplate> 有点工作,我列出了服务器并且它们扩展了,但是里面的项目似乎缺少文本。我错过了一些明显的步骤吗?
    • 我发现在使用树视图时,使用同时包含手头项目和子项目的 VM 是最简单的方法。例如,我有一个 ShipmentsViewModel,其中包含我的 ShipmentViewModel 集合。每个 ShipmentViewModel 包含一个 Shipment、一个 PackageViewModel 集合和一个 NoteViewModel 集合。我只将 ShipmentsViewModel(我实际上通常使用 CollectionViewSource 来控制过滤和诸如此类)绑定到 TreeView,并在我想要仅使用绑定字符串值的层次结构中定义我的模板。然后我样式。
    • 您的输出窗口中是否出现任何数据绑定错误?如果是这样,您可能有一个未正确限定的绑定引用。如果您可以访问 Mole(molosoft.com 强烈推荐),您可以跟踪这些绑定并更容易弄清楚发生了什么。
    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2015-07-10
    • 2011-07-14
    相关资源
    最近更新 更多