0

XAML でオブジェクトを treeviewcontrol WPF にバインドしようとしていますが、treview が空になっています。私がそれまでにそれをしているとき、treeview.items.add(GetNode())それは機能しています。

MVVM Framework(caliburn.Micro) を使用しています。Xaml で実行したかったのですが、Xaml で Item ソース プロパティを割り当てるにはどうすればよいですか? Node クラスのプロパティを作成し、プロパティ内でメソッド GetNode() を呼び出すことを試み、そのプロパティをツリービューの itemssource として割り当て、List を Observable コレクションに変更しました。それでも問題は同じです。

treeview.items.Add(GetNode())Node を返し、iノード コレクションを Hireachial Template に割り当てるときに、Xamlを動作させます。

<TreeView  Name="treeview2" 
            Grid.RowSpan="2"
            Grid.ColumnSpan="2"
            ItemContainerStyle="{StaticResource StretchTreeViewItemStyle}" Width="300">
            <TreeView.ItemTemplate>
                 <HierarchicalDataTemplate  ItemsSource="{Binding Nodes}">
                      <DockPanel LastChildFill="True">
                          <TextBlock  Padding="15,0,30,0" Text="{Binding Path=numitems}" TextAlignment="Right" 
    DockPanel.Dock="Right"/>
                          <TextBlock  Text="{Binding Path=Text}" DockPanel.Dock="Left" TextAlignment="Left" />
                      </DockPanel>
                 </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
  </TreeView>

サーバー側コード:

this.treeview2.Items.Add(GetNode());

GetNode は Node 型のリストを再帰的に構築します。

public class Node
{
    public string Text { get; set; }
    public List<Node> Nodes { get; set; }
    public ObservableCollection<Node> Nodes{get;set;} // with list and observable collection same results
    public int numitems { get; set; }
}
4

1 に答える 1

1

に加えて、HierarchicalDataTemplateTreeView の ItemsSource プロパティにバインドを追加します。

public class ViewModel
{
   private List<Node> _rootNodes;
   public List<Node> RootNodes 
   {
     get
     {
       return _rootNodes;
     }
     set
     {
       _rootNodes = value;
       NotifyPropertyChange(() => RootNodes);
     }
   }

   public ViewModel()
   {
      RootNodes = new List<Node>{new Node(){Text = "This is a Root Node}", 
                                 new Node(){Text = "This is the Second Root Node"}};
   }

XAML では次のようになります。

<TreeView ItemsSource="{Binding RootNodes}"
          .... />

this.Treeview....編集:必要のない呼び出しを削除してください。UI 要素を参照するコードの量を最小限に抑えるようにしてください。バインディングですべてを行うことができ、コードで UI 要素を操作する必要はありません。

于 2012-11-13T22:35:42.853 に答える