0

オブジェクト(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);

ここで、「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>

私のコードは機能しません、何が問題なのですか?

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 に答える