WPF入门(四):简单绑定 - 静态资源绑定

先看代码

 

1  namespace  WpfApplication3
2  {
3       class  Person
4      {
5           public   string  Name {  get set ; }
6           public   int   Age {  get set ; }
7      }
8  }

 

 

ExpandedBlockStart.gif 代码
 1  < Window x:Class = " WpfApplication3.Window1 "
 2      xmlns = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "
 3      xmlns:x = " http://schemas.microsoft.com/winfx/2006/xaml "
 4           xmlns:local  = " clr-namespace:WpfApplication3 "
 5      Title = " Window1 "  Height = " 298 "  Width = " 681 " >
 6       < Window.Resources >
 7           < local:Person x:Key = " Tom "  Name = " tom1 "  Age = " 13 " />
 8       </ Window.Resources >
 9       < Grid DataContext = " {StaticResource Tom} " >
10           < TextBlock Margin = " 25,29,0,0 "  Name = " textBlock1 "  Height = " 21 "  VerticalAlignment = " Top "  HorizontalAlignment = " Left "  Width = " 38 " >
11              Name:
12           </ TextBlock >
13           < TextBox Text = " {Binding Path=Name} "  Height = " 21 "  HorizontalAlignment = " Left "  Margin = " 83,29,0,0 "  Name = " textBlock2 "  VerticalAlignment = " Top "  Width = " 120 "   />
14           < TextBlock Text = " Age: "  Height = " 21 "  HorizontalAlignment = " Left "  Margin = " 25,68,0,0 "  Name = " textBlock3 "  VerticalAlignment = " Top "  Width = " 38 "   />
15           < TextBox Text = " {Binding Path=Age} "  Height = " 23 "  HorizontalAlignment = " Left "  Margin = " 83,66,0,0 "  Name = " textBox1 "  VerticalAlignment = " Top "  Width = " 120 "   />
16       </ Grid >
17  </ Window >

 

 

这里先写了个实体类,然后在页面里绑定了实体的数据。我们看看上面的第4行 “xmlns:local ="clr-namespace:WpfApplication3"” 声明式的引入命名空间,并且声明了前缀"local".则下文使用的local元素标记都默认在本命名空间下。相当于一句"using namespace WpfApplication"。而"clr-namespace"则表明是个CLR的对象类型,应该是会反射技术。

在第6行写了个 “<Window.Resources>” 该标签是声明了资源区域。

第7行描述了一个对象"<local:Person x:Key="Tom" Name="tom1" Age="13"/> ,了解xml的都能看懂这句,声明一个Person对象,name= tome1, age = 13,编译器读到该句的时,会根据所在的命名空间创建对象。

 

在Grid里声明了要绑定的对象 “ <Grid DataContext="{StaticResource Tom}">” ,对Grid的 DataContext属性 绑定一个对象,该对象在静态资源"StaticResource "中的key="Tom" 的对象。这个key对应刚刚在第7行声明的对象的key.将 “<Window.Resources>” 标签内的对象存放在一个字典表(Dictionary集合)中,通过字典表的key进行检索。

 

对容器控件(父控件)绑定了一个对象,继续就是为其下的子控件制定要绑定的属性了。第13行

<TextBox Text="{Binding Path=Name}" Height="21" HorizontalAlignment="Left" Margin="83,29,0,0" Name="textBlock2" VerticalAlignment="Top" Width="120" />

这句话就是在其中的一个TextBox控件里的Text属性里绑定 到 属性“Name”的值了。

 

本文中我们看到引入命名空间的写法,和前缀。和DataContext的绑定,绑定步骤:

1.对容器控件(父控件)的属性DataContext指定要绑定的对象。

1.对容器控件下的子控件(目标控件)制定要绑定的 属性名。

 

而在实际开发中,我们的对象不会存在静态资源这样形式的。往往在数据库中。那么如何绑定在从数据库读取到的对象呢?

先看修改后的代码:

页面

ExpandedBlockStart.gif 代码
 1  < Window x:Class = " WpfApplication3.Window1 "
 2      xmlns = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "
 3      xmlns:x = " http://schemas.microsoft.com/winfx/2006/xaml "
 4           xmlns:local  = " clr-namespace:WpfApplication3 "
 5      Title = " Window1 "  Height = " 298 "  Width = " 681 "  Loaded = " Window_Loaded " >
 6 
 7       < Grid Name = " grid1 " >
 8           < TextBlock Margin = " 25,29,0,0 "  Name = " textBlock1 "  Height = " 21 "  VerticalAlignment = " Top "  HorizontalAlignment = " Left "  Width = " 38 " >
 9              Name:
10           </ TextBlock >
11           < TextBox Text = " {Binding Path=Name} "  Height = " 21 "  HorizontalAlignment = " Left "  Margin = " 83,29,0,0 "  Name = " textBlock2 "  VerticalAlignment = " Top "  Width = " 120 "   />
12           < TextBlock Text = " Age: "  Height = " 21 "  HorizontalAlignment = " Left "  Margin = " 25,68,0,0 "  Name = " textBlock3 "  VerticalAlignment = " Top "  Width = " 38 "   />
13           < TextBox Text = " {Binding Path=Age} "  Height = " 23 "  HorizontalAlignment = " Left "  Margin = " 83,66,0,0 "  Name = " textBox1 "  VerticalAlignment = " Top "  Width = " 120 "   />
14       </ Grid >
15  </ Window >

 

 

后置代码:

 

ExpandedBlockStart.gif 代码
 1     public   partial   class  Window1 : Window
 2      {
 3           public  Window1()
 4          {
 5              InitializeComponent();
 6          }
 7 
 8           private   void  Window_Loaded( object  sender, RoutedEventArgs e)
 9          {
10              grid1.DataContext  =  GetPersonFromDatabase();
11          }
12 
13           private  Person GetPersonFromDatabase()
14          {
15               // 从数据库获得数据对象 <演示>
16               return   new  Person() { Name  =   " join " , Age  =   30  };
17          }
  }

 

 

首先为Grid指定了一个名字"grid1",这样我们才能在后置代码里使用这个对象。在后置代码里我们有个 "GetPersonFromDatabase"方法,我们可以在这里完成 具体的数据访问操作,我这里只是简单演示,就直接new出来了。我们在窗体的Loaded事件里有这么一句话

 grid1.DataContext = GetPersonFromDatabase();
仍然是为gird对象的DataContext赋值,这个页面里做的绑定效果是一样的。F5运行可以看一下。

 

整个编码模式是不是觉得很熟悉,根本就是和asp.net一样的嘛。把winform开发方式和asp.net 开发方式等同起来。这样带来的问题是,我们需要学习新的xaml语言来写界面,视图。类似使用html来做网页一样。同时,运行时容器问题,就像iis,我们写好的html脚本直接放到配置好的虚拟目录下就能运行。不知道wpf准备提供这样的容器么,加入使用xaml的代码仍然要编译一次,岂不是仍然那很麻烦。如果有了这么一个新的强大的容器呢,比如说“新的浏览器”,那么未来的开发方式将是多么的令人期待,或许就不再有windows和web开发之分了。OMG...最近新流行的html5不知道是什么样子了,雷声很大,我也没接触过呢。由此看来wpf ,具体可以说是xaml将是微软的重点方向了,于是也可以说,我们在使用过渡期的语言和方式了。不过我们仍然要学习它。学的是思想。

 

待续ing....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值