C# 将类绑定到WPF树视图

C# 将类绑定到WPF树视图,c#,wpf,treeview,C#,Wpf,Treeview,我有一个对象,它包含一个可观察的集合 我在想如何把这些都贴到树上。 因此,主要对象是父对象,可观察集合中的项是子对象。 当前该类具有可绑定到标头的公共字符串属性。 以下是本课程的部分内容: public class ServerObject : INotifyPropertyChanged { private string _serverName; ObservableCollection<string> _instanceList; public Obse

我有一个对象,它包含一个可观察的集合 我在想如何把这些都贴到树上。 因此,主要对象是父对象,可观察集合中的项是子对象。 当前该类具有可绑定到标头的公共字符串属性。 以下是本课程的部分内容:

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>();
    }
}
公共类服务器对象:INotifyPropertyChanged
{
私有字符串_serverName;
可观察收集(instanceList);;
公共可观察收集实例列表
{
获取{return\u instanceList;}
}
公共字符串服务器名
{
获取{return\u serverName;}
设置
{
_serverName=value;
RaisePropertyChanged(“服务器名”);
}
}
公共服务器对象(字符串名称、字符串版本)
{
ServerName=name;
_instanceList=新的ObservableCollection();
}
}

提前感谢。

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

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

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


如果您当前正在使用MVVM(或者您计划开始使用MVVM),请查看下面的链接,以获得一篇关于MVVM的非常好的文章。

没有意识到我必须绑定到顶级,这就解释了我做错了什么。我必须遵守发球名单。感谢你的工作,我得到了服务器列表,他们展开,但里面的项目似乎是缺少文字。我错过了一些明显的步骤,是吗?我发现在使用TreeView时,使用同时包含手头项目和子项目的VM是最容易的。例如,我有一个ShipmentsViewModel,其中包含我的ShipmentViewModels集合。每个ShipmentViewModel包含一个装运、一个PackageViewModels集合和一个NoteViewModels集合。我只将ShipmentsViewModel(实际上我通常使用CollectionViewSource来控制过滤等等)绑定到TreeView,并且只使用绑定的字符串值在层次结构中定义我想要的模板。然后我开始做样式。您的输出窗口中是否有任何数据绑定错误?如果是这样,您可能有一个绑定引用没有得到正确的限定。如果您有权访问Mole(强烈推荐),您可以跟踪这些绑定并更容易地了解发生了什么。