דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך לעשות WPF Binding ב- TreeView

איך לעשות WPF Binding ב- TreeView

מתוזמן נעוץ נעול הועבר תכנות
2 פוסטים 2 כותבים 104 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • pcinfogmachP מנותק
    pcinfogmachP מנותק
    pcinfogmach
    כתב ב נערך לאחרונה על ידי pcinfogmach
    #1

    אני מנסה ללמוד קצת יותר על 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;
                    }
                }
            }
    
    
        }
    }
    
    

    גמ"ח מידע מחשבים ואופיס

    תגובה 1 תגובה אחרונה
    0
    • M מנותק
      M מנותק
      Mordechai 0
      כתב ב נערך לאחרונה על ידי
      #2

      שתי נקודות חשובות

      1. PropertyChanged מודיע למסך שהערך השתנה ולכן אתה צריך להשים את השם של הערך שהכנסת בxaml למשל במקום
      NotifyPropertyChanged("_isExpanded");
      

      תכתוב

      NotifyPropertyChanged("IsExpanded");
      

      או יותר טוב תשתמש ב nameof

      NotifyPropertyChanged(nameof(IsExpanded));
      
      1. בקשר לשאלה שלך זה הקוד המתוקן
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
      <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
      

      אגב מדהים לראות את ההתקדמות שלך בxaml זה מראה שיש לך הרבה רצון ויוזמה
      בהצלחה

      תגובה 1 תגובה אחרונה
      5

      בא תתחבר לדף היומי!
      • התחברות

      • אין לך חשבון עדיין? הרשמה

      • התחברו או הירשמו כדי לחפש.
      • פוסט ראשון
        פוסט אחרון
      0
      • דף הבית
      • קטגוריות
      • פוסטים אחרונים
      • משתמשים
      • חיפוש
      • חוקי הפורום