אני מנסה ללמוד קצת יותר על binding בפקד TreeView ב WPF על פי הכתבה הזו:
https://wpf-tutorial.com/treeview-control/treeview-data-binding-multiple-templates/
https://wpf-tutorial.com/treeview-control/handling-selection-expansion-state/
את השלב הראשון של binding ל-Hirarchy הצלחתי לעשות
אבל את השלב השני של binding לפעולות של ISEXPANDED ו ISSELCTED אני לא מצליח לעשות כלומר זה לא עובד לי
אשמח לקבל הדרכה בעניין ממי שיכול. תודה מראש
מצו"ב הקוד שעשיתי.
<Window x:Class="WPF_BInding.TreeViewBinding"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF_BInding"
mc:Ignorable="d"
Title="TreeViewBinding" Height="450" Width="800">
<Grid>
<StackPanel>
<TreeView x:Name="treeView">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:myTreeViewItem}" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Header}" Tag="{Binding Tag}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
<Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
<WrapPanel>
<Button Name="btnSelectNext" Click="btnSelectNext_Click" Width="120">Select next</Button>
<Button Name="btnToggleExpansion" Click="btnToggleExpansion_Click" Width="120" Margin="10,0,0,0">Toggle expansion</Button>
</WrapPanel>
</StackPanel>
</Grid>
</Window>
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;
namespace WPF_BInding
{
/// <summary>
/// Interaction logic for TreeViewBinding.xaml
/// </summary>
public class myTreeViewItem : TreeViewItemBase
{
public string Header { get; set; }
public string Tag { get; set; }
public ObservableCollection<myTreeViewItem> Items { get; set; } = new ObservableCollection<myTreeViewItem>();
}
public class TreeViewItemBase : INotifyPropertyChanged
{
private bool _isSelected;
private bool _isExpanded;
public bool IsSelected
{
get { return this._isSelected; }
set
{
if (value != this._isSelected)
{
this._isSelected = value;
NotifyPropertyChanged("_isSelected");
}
}
}
public bool IsExpanded
{
get { return this._isExpanded; }
set
{
if (value != this._isExpanded)
{
this._isExpanded = value;
NotifyPropertyChanged("_isExpanded");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
public partial class TreeViewBinding : Window
{
public TreeViewBinding()
{
InitializeComponent();
List<myTreeViewItem> items = new List<myTreeViewItem>();
myTreeViewItem rootItem = new myTreeViewItem { Header = "root", IsExpanded = false };
myTreeViewItem child1 = new myTreeViewItem { Header = "child 1" , IsExpanded = false};
myTreeViewItem child2 = new myTreeViewItem { Header = "child 2", IsExpanded = false };
rootItem.Items.Add(child1);
rootItem.Items.Add(child2);
myTreeViewItem rootItem2 = new myTreeViewItem { Header = "root", IsExpanded = false };
myTreeViewItem child3 = new myTreeViewItem { Header = "child 1", IsExpanded = false };
myTreeViewItem child4 = new myTreeViewItem { Header = "child 2", IsExpanded = false };
rootItem2.Items.Add(child3);
rootItem2.Items.Add(child4);
items.Add(rootItem);
items.Add(rootItem2);
treeView.ItemsSource = items;
}
private void btnSelectNext_Click(object sender, RoutedEventArgs e)
{
}
private void btnToggleExpansion_Click(object sender, RoutedEventArgs e)
{
if (treeView.SelectedItem != null)
{
myTreeViewItem treeViewItem = treeView.SelectedItem as myTreeViewItem;
if (treeViewItem != null)
{
treeViewItem.IsExpanded = !treeViewItem.IsExpanded;
}
}
}
}
}



