如何将对象绑定到treeview?

时间:2012-06-19 06:51:00

标签: c# silverlight data-binding mvvm treeview

我正在尝试将对象(从db获取)绑定到树视图控件。

我的对象结构是这样的事情:

public class Post
{
    [DataMember]
    public string Name { set; get; }

    [DataMember]
    public List<Post> SubPosts { get; set; }
}

我定义了一个从db获取数据的方法,并将其放在我的类的属性中:

我的财产:

private Post _posts;
public Post Posts
{
    set
    {
        _posts = value;
        InvokePropertyChanged("Posts");
    }
    get { return _posts; }
}

然后

Posts = _orgChartModel.GetOrgChartByParentId(1);

现在,我想将“帖子”属性绑定到树视图。

XAML代码:

<sdk:TreeView ItemsSource="{Binding Posts}">
<sdk:TreeView.ItemTemplate>
    <sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=SubPosts}" >
        <StackPanel >
            <Image Width="48" Height="48" 
                Source="/CalendarClass;component/Assets/person.png" />
            <TextBlock TextAlignment="Center" VerticalAlignment="Center" 
                Text="{Binding Path=Name}" />
        </StackPanel>
    </sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>

我的代码不起作用,出了什么问题?

1 个答案:

答案 0 :(得分:1)

TreeView的ItemSource属性需要一种IEnumerable。你绑定到一个帖子,这就是为什么它不起作用。将您的帖子绑定属性更改为帖子集合:

private ObservableCollection<Post> _posts;
public ObservableCollection<Post> Posts
{
    set
    {
        _posts = value;
        InvokePropertyChanged("Posts");
    }
    get { return _posts; }
}

然后初始化你的绑定属性,以防视图没有提取帖子改变,再次绑定你的树视图:

  Posts = new ObservableCollection<Post>();
  var post = _orgChartModel.GetOrgChartByParentId(1);
  Posts.Add(post);
  treeView.ItemsSource = Posts; //or whatever the name of your TreeView control is.