WPFデータバインドツリービュー拡大/縮小
-
19-09-2019 - |
質問
私はちょうど彼らがにバインドされているオブジェクトを介してTreeView
ノードの拡大/縮小を制御する方法を見つけようとしています。オブジェクトは、IsExpanded
性質を持っている、と私はTreeView
ノード自身がそのプロパティに基づいて展開または縮小表示するためにそれを使用したい。
ここに私のコードです:
のC#ます:
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
this.DataContext = new List<Parent>() { Base.GetParent("Parent 1"), Base.GetParent("Parent 2") };
}
}
public class Base
{
public string Name { get; set; }
public bool IsExpanded { get; set; }
public static Parent GetParent(string name)
{
Parent p = new Parent() { Name = name };
p.Children.Add(new Child() { Name = "Child 1", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });
p.Children.Add(new Child() { Name = "Child 2", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });
p.Children.Add(new Child() { Name = "Child 3", GrandChildren = new ObservableCollection<GrandChild>() { new GrandChild() { Name = "Grandchild 1" } } });
return p;
}
}
public class Parent : Base
{
public ObservableCollection<Child> Children { get; set; }
public Parent()
{
this.Children = new ObservableCollection<Child>();
}
}
public class Child : Base
{
public ObservableCollection<GrandChild> GrandChildren { get; set; }
public Child()
{
this.GrandChildren = new ObservableCollection<GrandChild>();
}
}
public class GrandChild : Base
{
}
XAMLます:
<Window x:Class="HeterogeneousExperimentExplorer.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HeterogeneousTree"
Title="Window2" Height="300" Width="300">
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Parent}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Parent}" ItemsSource="{Binding GrandChildren}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView ItemsSource="{Binding}" />
</Grid>
</Window>
解決
解決策を考え出しました。本当に簡単ます:
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsNodeExpanded}">
</Setter>
</Style>
だから、スタイルは、ツリービューアイテムにバインドされたオブジェクトを取得し、そのIsNodeExpanded属性を見て、それがTreeViewItem.IsExpandedプロパティにその値を割り当てます。あなたはモード=双方向を追加した場合、彼らは(それが展開されたとき、ツリービューアイテムがオブジェクトを教えてくれます)互いに連絡いたします。
ありがとうございます。
他のヒント
ジョシュ・スミスのことで
FWIW、あなたがこの CodeProjectの記事これは、一般的な(Nレベル)アプローチを使用してMVVMベースのツリー・ビューを作成する方法を示します。
私はカルロの実装に何か問題があると示唆していないんだけど、TreeViewコントロールを理解する上でその記事が役に立ったと評価していて、一般的にはMVVMます。
所属していません StackOverflow