zoukankan      html  css  js  c++  java
  • 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语法:重画一下那张图吧(原图有问题):





     

  • 相关阅读:
    Redis安装与基本配置(转)
    redis和redis php扩展安装(转)
    fscanf()函数具体解释
    Android Studio非gradleproject编译后的apk文件在哪?
    Android利用CountDownTimer类实现倒计时功能
    Linux系统的安装
    由一个LED闪烁问题发现的MTK的LED driver中存在的问题
    OA系统权限管理设计(转载)
    Android开发之Mediaplayer
    “两地分居”的大学师生
  • 原文地址:https://www.cnblogs.com/Jax/p/694445.html
Copyright © 2011-2022 走看看