WPF新手之如何将数据绑定到TreeView
看过许多例子,全是绑定到类的,没人说如何绑定到某个对象,偏偏我这个绝对的新手就是要绑定到一个对象,只能自己摸索了:
首先要将数据绑定到容器,有以下几个默认条件:
①元数据必须包装在List或者ObservableCollection中,后者具有动态更新的功能。即,如果在程序中更改了ObservableCollection的值,与之绑定的控件会自动得到更新。
②待绑定的元数据可以是基本类型,也可以是复杂对象,这样就可以实际像TreeView这样的嵌套显示,但对象的每个成员都必须是基本类型,或者是ObservableCollection。这一点我花了一天的时间才自己琢磨出来。
③类中的所有成员变量全部要以get、set设置其访问属性。又花了我一天。
举例如下:
- public class IPConfig
- {
- public IPAddress IP { get; private set; }
- public bool IPUseDHCP { get; private set; }
- //...
- public IPConfig()
- {
- this.IP = IPAddress.None;
- this.IPUseDHCP = false;
- }
- public IPConfig(string IPstr):this()
- {
- try
- {
- this.IP = IPAddress.Parse(IPstr);
- }
- catch (Exception)
- { }
- }
- }
- public class Profile
- {
- public string Name { get; private set; }
- public ObservableCollection<IPConfig> IPC { get; private set; }
- public Profile() {this.IPC = new ObservableCollection<IPConfig>();}
- public Profile( string name )
- {
- this.Name = name;
- this.IPC = new ObservableCollection<IPConfig>();
- }
- public Profile(string name, IPConfig ipc)
- {
- this.Name = name;
- this.IPC = new ObservableCollection<IPConfig>();
- this.IPC.Add(ipc);
- }
- }
- public ObservableCollection<Profile> _profiles = new ObservableCollection<Profile>();
对数据源只要提供{Binding},然后在程序中设置DataContext来实现绑定。这样可以与一个具体的对象进行绑定:
- <TreeView x:Name="ProfileTreeView" ItemsSource="{Binding }">
(因为这里我是在TreeView上直接设置的,还不是像很多人在TreeViewItem上设置,因此_profiles中数据会直接在顶层显示)
接着在C#代码中对它进行设置:
- ProfileTreeView.DataContext = _profiles;
Profile是一个复杂对象,要在TreeView中显示,必须要设置其模板。而且从顶层算起是一种嵌套,所以要用HierarchicalDataTemplate。其中DataType表示接受类型Type的数据,Binding中的Path表示用的是Type中的哪个成员。
最内层的模板应该用DataTemplate。
- <TreeView.ItemTemplate>
- <!--模板-->
- <HierarchicalDataTemplate DataType="{x:Type local:Profile}"
- ItemsSource="{Binding Path=IPC}">
- <TextBlock Text="{Binding Path=Name}" />
- </HierarchicalDataTemplate>
- <DataTemplate DataType="{x:Type local:IPConfig}">
- <Grid>
- <Grid.Resources>
- <local:BoolConverter x:Key="BoolConverter"/>
- <Style x:Key="NameStyle" TargetType="{x:Type TextBlock}">
- <Setter Property="Background" Value="PapayaWhip"/>
- <Setter Property="Margin" Value="18,2,6,2"/>
- <Setter Property="HorizontalAlignment" Value="Right"/>
- </Style>
- <Style x:Key="PropStyle" TargetType="{x:Type TextBlock}">
- <Setter Property="Background" Value="WhiteSmoke"/>
- </Style>
- </Grid.Resources>
- <Grid.RowDefinitions>
- <RowDefinition></RowDefinition>
- <RowDefinition></RowDefinition>
- <RowDefinition></RowDefinition>
- <RowDefinition></RowDefinition>
- </Grid.RowDefinitions>
- <Grid.ColumnDefinitions>
- <ColumnDefinition></ColumnDefinition>
- <ColumnDefinition></ColumnDefinition>
- <ColumnDefinition></ColumnDefinition>
- <ColumnDefinition></ColumnDefinition>
- </Grid.ColumnDefinitions>
- <TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource NameStyle}" mce_Style="{StaticResource NameStyle}">自
- 动IP:</TextBlock>
- <TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource PropStyle}" mce_Style="{StaticResource PropStyle}"
- Text="{Binding Path=IPUseDHCP, Converter={StaticResource
- BoolConverter}}" />
- <!--。。。-->
- </Grid>
- </DataTemplate>
- </TreeView.ItemTemplate>
WPF新手之如何将数据绑定到TreeView的更多相关文章
- WPF下递归生成树形数据绑定到TreeView上
最终效果图:(用于学习类的效果 图片丑了点,看官莫怪) 新建窗体 然后在前端适当位置插入如下代码: <TreeView x:Name="> <TreeView.ItemTe ...
- WPF 动态创建 DataTemplate 及数据绑定
WPF 动态创建 DataTemplate 及数据绑定 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-22 参考: star ...
- WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果
原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果 本以为Label也有TextChanged 事件,但在使 ...
- WPF编游戏系列 之五 数据绑定
原文:WPF编游戏系列 之五 数据绑定 在上一篇通过用户控件将重复使用的控件封装为一个控件组,大大减少了C#代码数量,本篇继续对该控件组进行数据绑定,节省为每个控件赋值的工作.对于数据绑 ...
- WPF学习(8)数据绑定
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
- WPF中INotifyPropertyChanged用法与数据绑定
在WPF中进行数据绑定的时候常常会用到INotifyPropertyChanged接口来进行实现,下面来看一个INotifyPropertyChanged的案例. 下面定义一个Person类: usi ...
- WPF学习(8)数据绑定 https://www.cnblogs.com/jellochen/p/3541197.html
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
- WPF新手快速入门系列 2.绑定
[概要] 上一章讲了布局,按照市面上的书籍每一本讲的顺序都不一样,本系列是希望大家能快速上手去应对工作需要,所以本章就直接开始讲绑定. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:58074 ...
- WPF新手快速入门系列 1.布局
[概要] 该系列文章主要描述,新手如何快速上手做wpf开发.看过网上部分的教程,主要讲述的是介绍控件.这并没有问题,但是没有把自己的使用经验也完整的描述出来. 所以特此编写此系列文章希望能帮助到,因为 ...
随机推荐
- scp命令(基于ssh上传文件等)
(转:http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html) svn 删除所有的 .svn文件 find . -name .svn ...
- 查询UNDO使用情况
查看UNDO事务占用情况 SELECT s.username, s.sid, pr.PID, s.OSUSER, s.MACHINE, s.PROGRAM, rs.segment_id, r.usn, ...
- [BZOJ2118] 墨墨的等式(最短路)
传送门 好神啊.. 需要用非负数个a1,a2,a3...an来凑出B 可以知道,如果一个数x能被凑出来,那么x+a1,x+a2.......x+an也都能被凑出来 那么我们只需要选择a1~an中任意一 ...
- 转载: GMM-HMM学习笔记
转载地址:http://blog.csdn.net/davidie/article/details/46929269 最近几天钻研了语音处理中的GMM-HMM模型,阅读了一些技术博客和学术论文,总算是 ...
- EC++学习笔记(五) 实现
条款26:尽可能延后变量定义式的出现时间 尽可能延后变量的定义,知道非得使用该变量的前一刻为止方法A: Widget W; ; i < n; ++i) { W = ... } 方法B: ; i ...
- Day 5 Linux之用户、群组和权限
Linux之用户.群组和权限 一.各文件及内容对应含义 1./etc/passwd文件 功能:存储所有用户的相关信息,该文件也被称为用户信息数据库(Database). 含义:如下图所示. 2./et ...
- SELinux 服务检查与关闭
查看SELinux状态: 1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: ...
- 《流畅的Python》一副扑克牌中的难点
1.现在在看<流畅的Python>这本书,看了三页就发现,这本书果然不是让新手来入门的,一些很常见的知识点能被这个作者玩出花来, 唉,我就在想,下面要分析的这些的代码,就算我费劲巴拉的看懂 ...
- MFC中的双缓冲技术(解决绘图闪烁问题)
转自 MFC绘图不闪烁——双缓冲技术[转] 在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃. 所谓双缓冲技术,下面是百度百科的 ...
- java消息队列怎么用
消息队列的使用场景是怎样的? 经常听到诸如rebbitmq,activemq,请教一下各位前辈消息队列的使用场景是怎样的,什么时候会用到它 校验用户名等信息,如果没问题会在数据库中添加一个用户记录 ...