Visual C ++ / MFCでは、ツリーにノードを追加し、そのノードを参照することで、親ノードの下に子を追加することができました。ただし、WPFには、私が見るようなものはありません。子/子をノードに追加する方法がわかりませんか?
どんな助けでもありがたいです。
2人がすでにMVVMを知っているようです!
解決策は以下のTimによって与えられます。
OPは私のコメントは本当に彼が答えと考えたものだと言ったので、私は先に進んでそれを答えに変えると思いました。
質問で説明されているのは、WPFでそれをどのように実行できるかということです。例えば:
var item = new TreeViewItem();
myTreeView.Items.Add(item);
var subItem1 = new TreeViewItem();
var subItem2 = new TreeViewItem();
item.Items.Add(subItem1);
item.Items.Add(subItem2);
それは空白のアイテムの束を追加します。
そのルートに移動する場合は、各TreeViewItemのHeaderプロパティを使用して表示内容を制御し、Tagプロパティを使用してデータを保持できます。
ただし、バインディングルートを使用し、HierarchicalDataTemplatesを使用して外観を制御することをお勧めします。そうすれば、データ用にこれらの偽のコンテナー(TreeViewItems)を手動で作成する必要がなくなります。
HierarchicalDataTemplatesを読むことをお勧めします。これにより、プロセスがバインディングでどのように機能するかについての適切な概要がわかります。また、MVVM全般についても読んでください。
クイックグーグル検索「wpftreeview」は、WPFでツリービューを正しく使用する方法に関するいくつかの素晴らしい記事を見つけました。
例1: http: //www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode
例2: http ://www.c-sharpcorner.com/uploadfile/mahesh/treeview-in-wpf/
これで開始できます。MVVMアプローチを試したときに質問を更新し、より具体的な質問があります。
このようにモデルを作成します
public class WrappedNode
{
public string Name { get; set; }
public ObservableCollection<WrappedNode> Nodes { get; set; }
public WrappedNode()
{
Nodes = new ObservableCollection<WrappedNode>();
}
}
ツリービューにバインドするノードリスト
private ObservableCollection<WrappedNode> _nodeList;
public ObservableCollection<WrappedNode> NodeList
{
get { return _nodeList; }
set
{
_nodeList = value;
RaisePropertyChanged(() => NodeList);
}
}
そしてxamlで:
<TreeView Grid.Row="1"
ItemsSource="{Binding NodeList}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type scnvm:WrappedNode}" ItemsSource="{Binding Nodes}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
ノードに子を持たせたい場合は、そのノードのNodesプロパティに子ノードを追加するだけです。
親としてアイテムを追加するには:
var item = new TreeViewItem();
item.Header = "First Element";
tree.Items.Add(item); //tree is your treeview
特定の要素の子として要素を追加するには:
var subItem = new TreeViewItem();
subItem.Header = "Subitem";
var parent = tree.SelectedItem as TreeViewItem; // Checking for selected element
parent.Items.Add(subItem);