2012-06-19 44 views
0

我想绑定一个对象(从数据库中获取)到treeview控件。如何将对象绑定到treeview?

我的目标意象结构是有些事情是这样的:

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

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

我定义获得从数据库数据,并把在我的类的属性的方法:

我的房产:

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

然后

Posts = _orgChartModel.GetOrgChartByParentId(1); 

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

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> 

我的代码不能正常工作,有什么不对?

+0

“这不行”。这是什么意思? – GazTheDestroyer

+0

你还没有解释。什么不行?你得到一棵空树吗?你是否遇到绑定错误? – GazTheDestroyer

+0

空树... –

回答

1

TreeView的ItemSource属性需要一种IEnumerable类型。您绑定到单个Post,这是它无法工作的原因。改变你的帖子绑定属性是岗位的集合:

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

然后初始化结合特性和公正的情况下视图不拿起的帖子改变,再次与您的TreeView:

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