• WPF 学习笔记(数据绑定篇)


    此文章是一篇学习笔记,是学习Windows SDK中关于数据绑定部分的笔记。如果你安装了Windows SDK,你一般可以在他的例子目录中找到一个叫 ConnectedData 的目录。

    ADODataSet

    此示例演示了:

    l  如何将DataSet中的一个表绑定了ListBox中;

    l  指定明细的显示方式;

    l  自定义转换。


    要运行此示例,需要运行
    CopyData.cmd,此批处理复制BookData.mdbApplicationData目录。

    首先初始化一个DataSet数据源,然后调用:

    myListBox.DataContext = myDataSet;

    表示为myListBox设置数据上下文为此DataSet,在XML中,描述为:

        <ListBox Name="myListBox" Height="200"

          ItemsSource
    ="{Binding Path=BookTable}"

          ItemTemplate  
    ="{StaticResource BookItemTemplate}"/>

    其中,ItemSource=”{Binding Path=BookTable}”,表示绑定到子属性(在这里是DataSet的子表)BookTable

    ItemTemplate  ="{StaticResource BookItemTemplate}指定了明细的显示模板为静态资源BookItemTemplate,此静态资源的定义如下:

         <DataTemplate x:Key="BookItemTemplate">

            
    <Grid>

              
    <Grid.ColumnDefinitions>

                
    <ColumnDefinition Width="250" />

                
    <ColumnDefinition Width="100" />

                
    <ColumnDefinition Width="*"/>

              
    </Grid.ColumnDefinitions>

              
    <TextBlock Text="{Binding Path=Title}" Grid.Column="0"

                FontWeight
    ="Bold" />

              
    <TextBlock Text="{Binding Path=ISBN}" Grid.Column="1" />

              
    <TextBlock Grid.Column="2" Text="{Binding Path=NumPages}"

                         Background
    ="{Binding Path=NumPages,

                  Converter={StaticResource MyConverter}}"
    />

            
    </Grid>

          
    </DataTemplate>

    描述了明细使用3列显示,第一列绑定到Title属性,第二列绑定到ISBN属性,第三列绑定到NumPages属性。

    第三列的Background也绑定到NumPages属性中,但是你知道的,背景色怎么可以是数字类型呢?这里是指定了一个转换器,转化器是一个实现IValueConverter接口的对象。参考:IntColorConverter.cs

    BindConversionMarkup

    此示例演示了:

    l  转换器在转换时获取被转化的类型。


    在红色的标签描述中:

    <TextBlock Name="myconvertedtext"

        Foreground
    ="{Binding Path=TheDate,

                             Converter={StaticResource MyConverterReference}}"
    >

        
    <TextBlock.Text>

          
    <Binding Path="TheDate"

                   Converter
    ="{StaticResource MyConverterReference}"/>

    </TextBlock.Text>

    前景色和文本都绑定到TheDate属性上,而且他们使用了相同的转换器,那么转换器如何在绑定时,正确的将文本返回给Text属性,而将颜色返回给Foreground属性呢?

    public class MyConverter : IValueConverter

      
    {

        
    public object Convert(object o, Type type,

            
    object parameter, CultureInfo culture)

        
    {

            DateTime date 
    = (DateTime)o;

            
    switch (type.Name)

            
    {

                
    case "String":

                    
    return date.ToString("F", culture);

                
    case "Brush":

                    
    return Brushes.Red;

                
    default:

                    
    return o;

          }


        }


          
    public object ConvertBack(object o, Type type,

              
    object parameter, CultureInfo culture)

          
    {

              
    return null;

          }


      }

    可以看出,Convert通过检测被转换类型,将返回正确的数据,也就是说,绑定系统会正确的转递他希望的数据类型。

    BindDPtoDP

    此示例演示了如何绑定到一个已有的控件上。


    在此示例中,当我们下拉选择不同的颜色时,下面的正方形颜色会随之改变。下面是绑定代码:

       <Canvas>

            
    <Canvas.Background>

              
    <Binding ElementName="myComboBox" Path="SelectedItem.Content"/>

            
    </Canvas.Background>

          
    </Canvas>

    在此代码中,可以设置绑定对象是一个当前的对象,使用ElementName指定,Path属性还是一样的。

    当然,此示例也展示了绑定系统的自动转化功能,其数据源是字符串类型,目标被转化为一个颜色刷。

  • 相关阅读:
    “菜鸟”程序员和“大神”程序员差距在哪里?别告诉我你连菜鸟都不算!
    Android开发:为什么你的学习效率如此低,为什么你很迷茫?
    Android架构师吐槽腾讯王者荣耀的程序员,排位匹配算法怎么搞的,每次都输
    程序员如何回答面试官“请介绍一下自己”这类问题
    Android程序员事件分发机制学习笔记
    面试时,问哪些问题能试出一个 Android 应用开发者真正的水平?
    List、Set、Map的区别
    在Eclipse中使用JUnit4进行单元测试(图文教程一)
    1
    2016、11、17
  • 原文地址:https://www.cnblogs.com/tansm/p/900589.html
Copyright © 2020-2023  润新知