0

我正在尝试将一个对象(从数据库中获取)绑定到树视图控件。

我的对象结构是这样的:

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>

我的代码不起作用,怎么了?

4

1 回答 1

1

TreeView 的 ItemSource 属性需要 IEnumerable 类型。您绑定到单个帖子,这就是它不起作用的原因。将您的 Posts 绑定属性更改为帖子的集合:

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.
于 2012-06-19T08:43:38.097 回答