原文:WPF笔记(1.8 资源与映射)——Hello,WPF!

终于,看明白了,已经是凌晨1:39分。
这本书这一节写得实在是不好,一个local搞得我糊里糊涂,于是,准备按照他的思路,按照我的理解,改写一遍,包括源代码。
首先,这句话WPF新版本已经不用了:
<?Mapping XmlNamespace="local" ClrNamespace="DataBindingDemo" ?>,这里DataBindingDemo是例子的命名空间。
然后Window标签中这个属性设置
xmlns:local="local"——改为:
xmlns:local="clr-namespace:DataBindingDemo",这里把命名空间DataBindingDemo与命名空间local进行mapping。clr-namespace是固定语法,这能这么写。
接下来,在<Window.Resources>中设置资源:

        <local:Nicknames x:Key="XX">
            <local:Nickname Name="Don" Nick="Naked" />
            <local:Nickname Name="Martin" Nick="Gudge" />
            <local:Nickname Name="Tim" Nick="Stinky" />
        </local:Nicknames>

这里local等价于DataBindingDemo,所以有NickName类,我们声名一个该类下的对象叫做XX,我们要做的是给XX增加一些资源,就是Nickname对象,于是有了相应的三笔数据。
*注,x:Key用于获取创建对象的名字。

然后在DockPanel中进行绑定,直接指到XX资源,这个刚才定义并赋值的对象:
 <DockPanel DataContext="{StaticResource XX}">

这样,相应的后台构造函数改动为:

        public Window1()
        {
            InitializeComponent();
 
            this.addButton.Click += addButton_Click;

            // get names collection from resources
            this.names = (Nicknames)this.FindResource("XX");

            // no need to make data available for binding here
            //dockPanel.DataContext = this.names;
          }

可以看到,初始化和绑定按钮事件没有改变,下面这句话是关键:
this.names = (Nicknames)this.FindResource("XX");
也就是说,找到前台axml的XX对象,拆箱后转给names私有变量。不用再给dockPanel绑定数据了,因为前台xaml已经实现绑定了。

——例子讨论完毕。

最后再讨论一下xaml的Mapping语法:重画一下那张图吧(原图有问题):

WPF笔记(1.8 资源与映射)——Hello,WPF!的更多相关文章

  1. WPF笔记(1.3 属性元素)——Hello,WPF!

    原文:WPF笔记(1.3 属性元素)--Hello,WPF! 这一节中“属性元素”的概念可以用匪夷所思形容.1.WPF用标签元素实现对象建模,有两种:Control和Container,都用来装载内容 ...

  2. WPF笔记(1.2 Navigation导航)——Hello,WPF!

    原文:WPF笔记(1.2 Navigation导航)--Hello,WPF! 这一节是讲导航的.看了一遍,发现多不能实现,因为版本更新了,所以很多旧的语法不支持了,比如说,不再有NavigationA ...

  3. WPF笔记(1.9 样式和控件模板)——Hello,WPF!

    原文:WPF笔记(1.9 样式和控件模板)--Hello,WPF! 资源的另一个用途是样式设置: <Window >  <Window.Resources>    <St ...

  4. (转)WPF控件开源资源

    (转)WPF控件开源资源 Textbox Drag/Drop in WPFhttp://www.codeproject.com/Articles/42696/Textbox-Drag-Drop-in- ...

  5. 【转载】linux内核笔记之高端内存映射

    原文:linux内核笔记之高端内存映射 在32位的系统上,内核使用第3GB~第4GB的线性地址空间,共1GB大小.内核将其中的前896MB与物理内存的0~896MB进行直接映射,即线性映射,将剩余的1 ...

  6. WPF笔记(2.8 常用的布局属性)——Layout

    原文:WPF笔记(2.8 常用的布局属性)--Layout 这一节老没意思,啰里啰唆的尽是些HTML的属性,挑几个好玩的List出来,备忘:Padding与Margin的区别:Margin指控件边界与 ...

  7. WPF笔记(2.9和2.10)——Layout

    原文:WPF笔记(2.9和2.10)--Layout 2.9讲的是,如果内部设定超过容器大小,怎么办?StackPanel会裁剪越界部分DockPanel和Grid会智能判断,从而决定换行. 2.10 ...

  8. WPF笔记(2.7 文字布局)——Layout

    原文:WPF笔记(2.7 文字布局)--Layout 这一节介绍的是文字布局的几个控件:1.TextBlock      最基本的文字控件可以配置5个Font属性.TextWraping属性,&quo ...

  9. WPF笔记(2.5 Canvas)——Layout

    原文:WPF笔记(2.5 Canvas)--Layout Canvas是最精确的布局容器--绝对定位,此书作者不建议使用,以为控件的大小一般会随着内部字体图片的动态生成而自动变化,所以使用前三种布局是 ...

随机推荐

  1. hex、bin、elf、axf文件区别

    AXF和ELF axf文件是ARM的调试文件,除了包含bin的内容之外,还附加了其他的调试信息,这些调试信息加在可执行的二进制数据的前面.在调试的时候,这些调试信息是不必下到RAM中去的,真正下到RA ...

  2. QWidget: Must construct a QApplication before a QPaintDevice的问题

    卧槽,无意中编译自己基于Qt创建的Debug工程的时候运行时发生了标题中的错误,原来是把Qt Release的库也放到additional dependencies里面了,同时链接了Debug和Rel ...

  3. IOS6和IOS7 显示一样的SearchBar

    if (isIOS7) { mySearchBar=[[UISearchBar alloc]initWithFrame:CGRectMake(, , , )]; mySearchBar.autocor ...

  4. 浅谈NoSQL之MongoDB数据库

    对于SQL数据库(关系型数据库)我们大家都有所了解,比如MySQL,sqlserver,oracle等数据库.在日常的开发过程中我们遇到服务器端的数据存储时几乎第一反应就是使用SQL据库像我们最常见的 ...

  5. java类加载器行为[笔记]

    1. Java虚拟机使用第一个类的第一件事情就是将该类的字节码装进来,装载类字节码的功能是由类装器完成的,类半遮器负责根据一个类的名称来定位和生成类的字节码数据后返回给Java虚拟机. 2. 类装载器 ...

  6. android自己定义ViewPager之——3D效果应用

    今天在github里看到一个3D效果的ViewPager,感觉做出来的ViewPager滑动的时候效果十分的炫,就check out下来研究了一下怎样实现的.以及怎样使用.将整个ViewPager稍加 ...

  7. IOS 设备信息读取

    let infoDictionary = NSBundle.mainBundle().infoDictionary let appDisplayName: AnyObject? = infoDicti ...

  8. 《JavaScript 闯关记》之单体内置对象

    ECMA-262 对内置对象的定义是「由 JavaScript 实现提供的.不依赖于宿主环境的对象,这些对象在 JavaScript 程序执行之前就已经存在了」.意思就是说,开发人员不必显式地实例化内 ...

  9. CSS - 关于li中图文混排不能垂直居中的问题

    图片和文字一起放在li标签下不能同时垂直居中   解决办法: 1.设置图片的position:absolute; 2.把文字加上span标签: span{ height:30px;line-heigh ...

  10. Android 使用monkey自动测试

    很简单的一个monkey使用流程: 首先创建一个monkey脚本test.txt,例如一个简单的反复测试拍照功能的脚本: # Start of Script type= user count= 49 ...