WPF 的TreeView的TreeViewItem下动态生成TreeViewItem

树形结构仅部分需要动态生成TreeViewItem的可以参考本文。

xaml页面

复制代码
<TreeView MinWidth="220" >
    <TreeViewItem Header="功能列表" ItemsSource="{Binding Functions}">
        <TreeViewItem.ItemTemplate>
            <HierarchicalDataTemplate>
                <WrapPanel>
                    <CheckBox IsChecked="{Binding IsSelect}"/>
                    <Label Content="{Binding Name}"/>
                </WrapPanel>
            </HierarchicalDataTemplate>
        </TreeViewItem.ItemTemplate>
    </TreeViewItem>
</TreeView>

对象类:

复制代码
public class SelectFunction : NotifyPropertyChangedBaseClass
{
    private bool isselect;
    /// <summary>
    /// 是否选中
    /// </summary>
    public bool IsSelect
    {
        get { return isselect; }
        set
        {
            isselect = value;
            OnPropertyChanged();
        }
    }
    public Guid Id { get; set; }

    private string name;
    public string Name
    {
        get { return name; }
        set
        {
            name = value;
            OnPropertyChanged();
        }
    }
}

对象类继承的通知类:

复制代码
public class NotifyPropertyChangedBaseClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string propertyname = "")//通过该方法可以直接获取调用者的名称 前提是需要有默认参数
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
    }
}

XAML绑定的集合

复制代码
 private ObservableCollection<SelectFunction> functions;
 /// <summary>
 /// 可选的功能列表
 /// </summary>
 public ObservableCollection<SelectFunction> Functions
 {
     get { return functions; }
     set
     {
         functions = value;
         OnPropertyChanged();
     }
 }

//这只是集合的定义,自己给集合赋值

最终效果,我这没有用其自带的属性事件去判断是否选中,而是采用对象类中的IsSelect的值来判断的,仅供参考。

相关推荐
necessary6538 小时前
从工行“余额归零”事件看CAP定理:当金融系统在一致性与可用性之间做出选择
分布式·金融·wpf·可用性测试
棉晗榜9 小时前
WPF隐藏控件后,怎么让其上部的控件空间自动撑高
wpf
壹佰大多1 天前
【Redisson分布式锁源码分析-3】
数据结构·分布式·mysql·spring·spring cloud·wpf·lua
LateFrames2 天前
以小白视角尝试 WPF / WinUI3 / MAUI / MAUI Blazor 构建 Windows 桌面程序
windows·wpf·maui·mauiblazor·winui3
偶尔的鼠标人2 天前
Avalonia/WPF 打开子窗口,并且跨页面传值
c#·wpf·mvvm·avalonia
玖笙&2 天前
✨WPF编程进阶【6.1】:图形原则(附源码)
c++·c#·wpf·visual studio
lixy5792 天前
WPF检测网络状态切换
wpf
纸照片2 天前
WPF中为Button设置IsMouseOver和IsPressed事件中改变背景颜色不起作用
c#·.net·wpf
Aevget2 天前
DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(四)
ui·.net·wpf·devexpress·wpf控件
Z_W_H_2 天前
【ArcGISProSDK】刷新按钮样式
wpf·arcgisprosdk