看过许多例子,全是绑定到类的,没人说如何绑定到某个对象,偏偏我这个绝对的新手就是要绑定到一个对象,只能自己摸索了:

首先要将数据绑定到容器,有以下几个默认条件:
①元数据必须包装在List或者ObservableCollection中,后者具有动态更新的功能。即,如果在程序中更改了ObservableCollection的值,与之绑定的控件会自动得到更新。
②待绑定的元数据可以是基本类型,也可以是复杂对象,这样就可以实际像TreeView这样的嵌套显示,但对象的每个成员都必须是基本类型,或者是ObservableCollection。这一点我花了一天的时间才自己琢磨出来。
③类中的所有成员变量全部要以get、set设置其访问属性。又花了我一天。

举例如下:

  1. public class IPConfig
  2. {
  3. public IPAddress IP { get; private set; }
  4. public bool IPUseDHCP { get; private set; }
  5. //...
  6. public IPConfig()
  7. {
  8. this.IP = IPAddress.None;
  9. this.IPUseDHCP = false;
  10. }
  11. public IPConfig(string IPstr):this()
  12. {
  13. try
  14. {
  15. this.IP = IPAddress.Parse(IPstr);
  16. }
  17. catch (Exception)
  18. { }
  19. }
  20. }
  21. public class Profile
  22. {
  23. public string Name { get; private set; }
  24. public ObservableCollection<IPConfig> IPC { get; private set; }
  25. public Profile() {this.IPC = new ObservableCollection<IPConfig>();}
  26. public Profile( string name )
  27. {
  28. this.Name = name;
  29. this.IPC = new ObservableCollection<IPConfig>();
  30. }
  31. public Profile(string name, IPConfig ipc)
  32. {
  33. this.Name = name;
  34. this.IPC = new ObservableCollection<IPConfig>();
  35. this.IPC.Add(ipc);
  36. }
  37. }
  38. public ObservableCollection<Profile> _profiles = new ObservableCollection<Profile>();

对数据源只要提供{Binding},然后在程序中设置DataContext来实现绑定。这样可以与一个具体的对象进行绑定:

  1. <TreeView x:Name="ProfileTreeView" ItemsSource="{Binding }">

(因为这里我是在TreeView上直接设置的,还不是像很多人在TreeViewItem上设置,因此_profiles中数据会直接在顶层显示)

接着在C#代码中对它进行设置:

  1. ProfileTreeView.DataContext = _profiles;

Profile是一个复杂对象,要在TreeView中显示,必须要设置其模板。而且从顶层算起是一种嵌套,所以要用HierarchicalDataTemplate。其中DataType表示接受类型Type的数据,Binding中的Path表示用的是Type中的哪个成员。
最内层的模板应该用DataTemplate。

  1. <TreeView.ItemTemplate>
  2. <!--模板-->
  3. <HierarchicalDataTemplate DataType="{x:Type local:Profile}"
  4. ItemsSource="{Binding Path=IPC}">
  5. <TextBlock Text="{Binding Path=Name}" />
  6. </HierarchicalDataTemplate>
  7. <DataTemplate DataType="{x:Type local:IPConfig}">
  8. <Grid>
  9. <Grid.Resources>
  10. <local:BoolConverter x:Key="BoolConverter"/>
  11. <Style x:Key="NameStyle" TargetType="{x:Type TextBlock}">
  12. <Setter Property="Background" Value="PapayaWhip"/>
  13. <Setter Property="Margin" Value="18,2,6,2"/>
  14. <Setter Property="HorizontalAlignment" Value="Right"/>
  15. </Style>
  16. <Style x:Key="PropStyle" TargetType="{x:Type TextBlock}">
  17. <Setter Property="Background" Value="WhiteSmoke"/>
  18. </Style>
  19. </Grid.Resources>
  20. <Grid.RowDefinitions>
  21. <RowDefinition></RowDefinition>
  22. <RowDefinition></RowDefinition>
  23. <RowDefinition></RowDefinition>
  24. <RowDefinition></RowDefinition>
  25. </Grid.RowDefinitions>
  26. <Grid.ColumnDefinitions>
  27. <ColumnDefinition></ColumnDefinition>
  28. <ColumnDefinition></ColumnDefinition>
  29. <ColumnDefinition></ColumnDefinition>
  30. <ColumnDefinition></ColumnDefinition>
  31. </Grid.ColumnDefinitions>
  32. <TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource NameStyle}" mce_Style="{StaticResource NameStyle}">自
  33. 动IP:</TextBlock>
  34. <TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource PropStyle}" mce_Style="{StaticResource PropStyle}"
  35. Text="{Binding Path=IPUseDHCP, Converter={StaticResource
  36. BoolConverter}}" />
  37. <!--。。。-->
  38. </Grid>
  39. </DataTemplate>
  40. </TreeView.ItemTemplate>

WPF新手之如何将数据绑定到TreeView的更多相关文章

  1. WPF下递归生成树形数据绑定到TreeView上

    最终效果图:(用于学习类的效果 图片丑了点,看官莫怪) 新建窗体 然后在前端适当位置插入如下代码: <TreeView x:Name="> <TreeView.ItemTe ...

  2. WPF 动态创建 DataTemplate 及数据绑定

    WPF 动态创建 DataTemplate 及数据绑定 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-22 参考: star ...

  3. WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果

    原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使 ...

  4. WPF编游戏系列 之五 数据绑定

    原文:WPF编游戏系列 之五 数据绑定        在上一篇通过用户控件将重复使用的控件封装为一个控件组,大大减少了C#代码数量,本篇继续对该控件组进行数据绑定,节省为每个控件赋值的工作.对于数据绑 ...

  5. WPF学习(8)数据绑定

    说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...

  6. WPF中INotifyPropertyChanged用法与数据绑定

    在WPF中进行数据绑定的时候常常会用到INotifyPropertyChanged接口来进行实现,下面来看一个INotifyPropertyChanged的案例. 下面定义一个Person类: usi ...

  7. WPF学习(8)数据绑定 https://www.cnblogs.com/jellochen/p/3541197.html

    说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...

  8. WPF新手快速入门系列 2.绑定

    [概要] 上一章讲了布局,按照市面上的书籍每一本讲的顺序都不一样,本系列是希望大家能快速上手去应对工作需要,所以本章就直接开始讲绑定. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:58074 ...

  9. WPF新手快速入门系列 1.布局

    [概要] 该系列文章主要描述,新手如何快速上手做wpf开发.看过网上部分的教程,主要讲述的是介绍控件.这并没有问题,但是没有把自己的使用经验也完整的描述出来. 所以特此编写此系列文章希望能帮助到,因为 ...

随机推荐

  1. 牛客网Wannafly模拟赛

    A矩阵 时间限制:1秒 空间限制:131072K 题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行 ...

  2. 九度oj 题目1131:合唱队形

    题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们 ...

  3. [BZOJ1584] [Usaco2009 Mar]Cleaning Up 打扫卫生(DP)

    传送门 不会啊,看了好久的题解才看懂 TT 因为可以直接分成n段,所以就得到一个答案n,求解最小的答案,肯定是 <= n 的, 所以每一段中的不同数的个数都必须 <= sqrt(n),不然 ...

  4. eclipse导入svn检出的maven项目问题

    1.修改项目jdk环境和编译环境.消除红叉. 2.windows-preferences-java-installed jres,修改工作空间的jdk,在Default vm arguments栏中添 ...

  5. 转:C++ Vector用法深入剖析

    http://developer.51cto.com/art/201002/183645.htm C++编程语言中有一种叫做Vector的应用方法,它的作用在实际编程中是非常重要的.在这里我们将会为大 ...

  6. ngrinder的idea脚本开发环境配置

    1.安装toriseSvn,安装一定要选择comandline (默认是没选择的) 2.下载groovy,解压缩,在开发工具(ps:idea,eclipse)中设置groovy安装路径 3.在网站处创 ...

  7. JS控制背景音乐 没有界面

    建立一个HTML5页面,放置<audio>标签,设置音频文件源,设置循环播放.准备两张图片,分别表示开启和暂停背景音乐两种状态,可以点击. <audio id="music ...

  8. 【HDOJ6354】Everything Has Changed(计算几何)

    题意: 给定一个平面和一个(0,0)为中心的大圆,有n个小圆保证没有两两之间相交与覆盖整个大圆的情况,求小圆覆盖后大圆的周长并 1≤m≤100, -1e3<=x[i],y[i]<=1e3, ...

  9. 用delphi写多屏幕程序

    http://blog.csdn.net/zyyjc/article/details/6530728 别现在有些POS机是双屏幕的(比如卡西瓦POS机),一个屏幕可以当顾客显示屏用,当闲时也可以显示一 ...

  10. 数据结构之区间K大数

    求区间的问题有很多类,虽然前人有很多讲解了: 但是我在这里在普及一下,算是自己的一种复习吧. 1.静态询问一个区间的的第k大数,比如询问[l,r] k大数.虽然主席树可以处理,但是这类问题应该是划分树 ...