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


    先看代码

    1 namespace WpfApplication3
    2 {
    3     class Person
    4     {
    5         public string Name { getset; }
    6         public int  Age { getset; }
    7     }
    8 }
    代码
     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.对容器控件下的子控件(目标控件)制定要绑定的 属性名。

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

    先看修改后的代码:

    页面

    代码
     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>

    后置代码:

    代码
     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....

  • 相关阅读:
    webService入门理解
    spring 事物的一些理解
    代码规范
    Linux安装SSH服务
    java == 与 equals 相同与不同点
    ubuntu安装mysql
    SQL夯实基础(一):inner join、outer join和cross join的区别
    C#进阶之路(二):事件
    C#进阶之路(一):委托
    快速排序 Quick Sort
  • 原文地址:https://www.cnblogs.com/vir56k/p/1935213.html
Copyright © 2020-2023  润新知