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

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

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

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

מתוזמן נעוץ נעול הועבר תכנות
2 פוסטים 2 כותבים 164 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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

      שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

      נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

      בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

      הרשמה התחברות
      תגובה
      • תגובה כנושא
      התחברו כדי לפרסם תגובה
      • מהישן לחדש
      • מהחדש לישן
      • הכי הרבה הצבעות


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

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

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