با سلام خدمت بزگواران
بنده به تازگی کار با wpf رو شروع کردم. بعد مدتی گشتن در اینترنت برای treeviwe در wpf کلاس زیر و پیدا کردم.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Herdbook.Classes
{
public class TreeViewModel : INotifyPropertyChanged
{
TreeViewModel(string name)
{
Name = name;
Children = new List<TreeViewModel>();
}
#region Properties
public string Name { get; private set; }
public List<TreeViewModel> Children { get; private set; }
public bool IsInitiallySelected { get; private set; }
bool? _isChecked = false;
TreeViewModel _parent;
#region IsChecked
public bool? IsChecked
{
get { return _isChecked; }
set { SetIsChecked(value, true, true); }
}
void SetIsChecked(bool? value, bool updateChildren, bool updateParent)
{
if (value == _isChecked) return;
_isChecked = value;
if (updateChildren && _isChecked.HasValue) Children.ForEach(c => c.SetIsChecked(_isChecked, true, false));
if (updateParent && _parent != null) _parent.VerifyCheckedState();
NotifyPropertyChanged("IsChecked");
}
void VerifyCheckedState()
{
bool? state = null;
for (int i = 0; i < Children.Count; ++i)
{
bool? current = Children[i].IsChecked;
if (i == 0)
{
state = current;
}
else if (state != current)
{
state = null;
break;
}
}
SetIsChecked(state, false, true);
}
#endregion
#endregion
void Initialize()
{
foreach (TreeViewModel child in Children)
{
child._parent = this;
child.Initialize();
}
}
public static List<TreeViewModel> SetTree(string topLevelName)
{
List<TreeViewModel> treeView = new List<TreeViewModel>();
TreeViewModel tv = new TreeViewModel(topLevelName);
treeView.Add(tv);
#region Test Data
//Doing this below for this example, you should do it dynamically
//***************************************************
TreeViewModel tvChild1 = new TreeViewModel("منوی 1");
TreeViewModel tvChild2 = new TreeViewModel("منوی 2");
TreeViewModel tvChild3 = new TreeViewModel("منوی 3");
tv.Children.Add(tvChild1);
tv.Children.Add(tvChild2);
tv.Children.Add(tvChild3);
tvChild2.Children.Add(new TreeViewModel("زیرمنو"));
tvChild2.Children.Add(new TreeViewModel("زیر منو2"));
tvChild3.Children.Add(new TreeViewModel("زیر منوی"));
//***************************************************
#endregion
tv.Initialize();
return treeView;
}
public static List<string> GetTree()
{
List<string> selected = new List<string>();
return selected;
//***********************************************************
//From your window capture selected your treeview control like: TreeViewModel root = (TreeViewModel)TreeViewControl.Items[0];
// List<string> selected = new List<string>(TreeViewModel.GetTree());
//***********************************************************
}
#region INotifyPropertyChanged Members
void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
}
از طرفی من در پایگاه داده (SQL Server 2014) جدول ها و viwe زیر و دارم
CREATE TABLE [dbo].[Menu](
[MenuID] [smallint] NOT NULL,
[NenuName] [nvarchar](50) NOT NULL,
[MenuLevel] [smallint] NULL,
CONSTRAINT [PK_Menu] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[UserAccess](
[UserID] [tinyint] NOT NULL,
[MenuID] [smallint] NOT NULL,
CONSTRAINT [PK_UserAccess] PRIMARY KEY CLUSTERED
CREATE VIEW [dbo].[VwMenuList]
AS
SELECT MenuID, NenuName, MenuLevel,
(select COUNT(MenuID) from Menu as m2 where m1.MenuID=m2.MenuLevel) as childcount
FROM Menu as m1
چون من چگونگی فراخوانی و استفاده از کلاس بالا را نمی دونم در مورد پرسش های زیر نیاز به کمک دارم :
1- چطوری اطلاعات جدول Menu از پایگاه داده بخونم و در treeview نمایش بدم؟
2-چطور گزینه هایی از treeview که در جدول useraccess ثبت شده در هنگام فراخوانی treeview در اون نمایش بدم (یعنی گزینه هایی که در جدول useraccess هست در treeview تیک دار بشن)؟
3- چطور تغییرات treeview (تیک دار شدن یا برداشتن تیک های nodهای treeview)رو در جدول useraccess ذخیره کنم.
پانوشت :
به کمک کدهای زیر treeview رو در window خودم نمایش میدم
<Window.Resources>
<ResourceDictionary>
<Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="False" />
<Setter Property="IsSelected" Value="{Binding IsInitiallySelected, Mode=OneTime}" />
<Setter Property="KeyboardNavigation.AcceptsReturn" Value="True" />
</Style>
<HierarchicalDataTemplate x:Key="CheckBoxItemTemplate" ItemsSource="{Binding Children, Mode=OneTime}">
<StackPanel Orientation="Horizontal">
<CheckBox Focusable="False" IsChecked="{Binding IsChecked}" VerticalAlignment="Center" />
<ContentPresenter Content="{Binding Name, Mode=OneTime}" Margin="2,0" />
</StackPanel>
</HierarchicalDataTemplate>
</ResourceDictionary>
</Window.Resources>
<TreeView Height="157" HorizontalAlignment="Left" Margin="15,94,0,0" x:Name="treeView1"
VerticalAlignment="Top" Width="270"
ItemContainerStyle="{StaticResource TreeViewItemStyle}"
ItemTemplate="{StaticResource CheckBoxItemTemplate}"
BorderThickness="0" Background="#00000000" FlowDirection="RightToLeft" FontFamily="B koodak"/>
امیدوارم پرسش های من واضح بوده باشه و اطلاعات کافی برای پاسخ دادن در اختیارتون قرارداده باشم.
با سلام
در مورد اینکه میفرمایید در فراخوانی کلاس مشکل دارید شما برای اینکه با یک کلاس و توابع و متدهای اون کلاس کار کنید کافیه یک نمونه از کلاس ایجاد کنید و به توابع و متدهای اون کلاس دسترسی داشته باشید.
MyClass C = new MyClass();
C.method();
C.function();
اما با توجه به سوالتون به نظر میرسه مشکل اصلی شما اینه که قصد دارید یک TreeView در WPF ایجاد و استفاده کنید که نمیتونید. در این رابطه به زودی یک دوره آموزشی کوتاه ضبط خواهد شد و در بخش آموزش برنامه نویسی قرار خواهد گرقت.
دوره آموزشی زیر رو به صورت رایگان می تونید شرکت کنید
فیلم آموزش نمایش اطلاعات به صورت درختواره در WPF توسط TreeView
تاریخ :
1399/11/25
- ساعت :
11:22:00 AM
- بازدید :
3896
- پاسخ :
2
|
تاریخ :
1403/12/02
- ساعت :
12:09:00 AM
- بازدید :
270
- پاسخ :
1
|
تاریخ :
1398/07/08
- ساعت :
12:21:00 AM
- بازدید :
3049
- پاسخ :
2
|
تاریخ :
1403/11/23
- ساعت :
08:24:00 PM
- بازدید :
191
- پاسخ :
2
|
تاریخ :
1399/11/10
- ساعت :
10:01:00 PM
- بازدید :
7167
- پاسخ :
4
|
تاریخ :
1399/04/09
- ساعت :
08:51:00 PM
- بازدید :
3096
- پاسخ :
1
|
تاریخ :
1399/03/25
- ساعت :
08:58:00 PM
- بازدید :
3829
- پاسخ :
1
|
تاریخ :
1398/10/03
- ساعت :
10:47:00 PM
- بازدید :
5337
- پاسخ :
8
|
تاریخ :
1400/12/18
- ساعت :
10:24:00 AM
- بازدید :
2111
- پاسخ :
1
|
تاریخ :
1401/01/26
- ساعت :
12:14:00 PM
- بازدید :
3002
- پاسخ :
1
|
تاریخ :
1404/01/07
- ساعت :
05:02:00 AM
- بازدید :
90
- پاسخ :
1
|
تاریخ :
1402/04/28
- ساعت :
09:04:00 PM
- بازدید :
1314
- پاسخ :
0
|
تاریخ :
1403/12/30
- ساعت :
06:43:00 PM
- بازدید :
66
- پاسخ :
1
|
تاریخ :
1398/08/23
- ساعت :
09:16:00 PM
- بازدید :
9852
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
12:18:00 PM
- بازدید :
38
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
10:39:00 AM
- بازدید :
46
- پاسخ :
1
|
تاریخ :
1404/01/02
- ساعت :
05:05:00 PM
- بازدید :
60
- پاسخ :
1
|
تاریخ :
1403/12/30
- ساعت :
06:52:00 PM
- بازدید :
48
- پاسخ :
1
|
تاریخ :
1399/06/04
- ساعت :
02:25:00 PM
- بازدید :
4420
- پاسخ :
2
|
تاریخ :
1403/11/30
- ساعت :
10:36:00 AM
- بازدید :
202
- پاسخ :
2
|