zoukankan      html  css  js  c++  java
  • 【转载】wpf学习笔记数据绑定9

    public class MyData : ObservableCollection<string>
    {
        public MyData()
        {
            Add("Item 1");
            Add("Item 2");
            Add("Item 3");
        }
    }
    
    
    

    The following example binds the ItemsSource object of an ItemsControl to MyData.

    <!--Create an instance of MyData as a resource.-->
    <src:MyData x:Key="dataList"/>
    
    
    ...
    
    
    <ListBox ItemsSource="{Binding Source={StaticResource dataList}}"/>
    
    
    
    ListBox listBox1 = new ListBox();
    MyData listData = new MyData();
    Binding binding1 = new Binding();
    
    binding1.Source = listData;
    listBox1.SetBinding(ListBox.ItemsSourceProperty, binding1);
    
    
    

    The following illustration shows the ListBox control created in the previous example.

    ListBox

    The following example demonstrates how to populate an ItemsControl by using the Items property. The example adds the following different types of items to the ListBox:

    <!--Create a ListBox that contains a string, a Rectangle,
         a Panel, and a DateTime object. These items can be accessed
         via the Items property.-->
    <ListBox xmlns:sys="clr-namespace:System;assembly=mscorlib"
             Name="simpleListBox">
    
      <!-- The <ListBox.Items> element is implicitly used.-->
      This is a string in a ListBox
    
      <sys:DateTime>2004/3/4 13:6:55</sys:DateTime>
    
      <Rectangle Height="40" Width="40"  Fill="Blue"/>
    
      <StackPanel Name="itemToSelect">
        <Ellipse Height="40" Fill="Blue"/>
        <TextBlock>Text below an Ellipse</TextBlock>
      </StackPanel>
    
      <TextBlock>String in a TextBlock</TextBlock>
      <!--</ListBox.Items>-->
    </ListBox>
    
    
    
    // Add a String to the ListBox.
    listBox1.Items.Add("This is a string in a ListBox");
    
    // Add a DateTime object to a ListBox.
    DateTime dateTime1 = new DateTime(2004, 3, 4, 13, 6, 55);
    
    listBox1.Items.Add(dateTime1);
    
    // Add a Rectangle to the ListBox.
    Rectangle rect1 = new Rectangle();
    rect1.Width = 40;
    rect1.Height = 40;
    rect1.Fill = Brushes.Blue;
    listBox1.Items.Add(rect1);
    
    // Add a panel that contains multpile objects to the ListBox.
    Ellipse ellipse1 = new Ellipse();
    TextBlock textBlock1 = new TextBlock();
    
    ellipse1.Width = 40;
    ellipse1.Height = 40;
    ellipse1.Fill = Brushes.Blue;
    
    textBlock1.TextAlignment = TextAlignment.Center;
    textBlock1.Text = "Text below an Ellipse";
    
    stackPanel1.Children.Add(ellipse1);
    stackPanel1.Children.Add(textBlock1);
    
    listBox1.Items.Add(stackPanel1);
    
    
    

    The following illustration shows the ListBox created in the previous example.

    ListBox with four types of content

    The following example illustrates how to use the different styling and templating-related properties that are provided by the ItemsControl. The ItemsControl in this example is bound to a collection of Task objects. For demonstration purposes, the styles and templates in this example are all declared inline.

    <ItemsControl Margin="10"
                  ItemsSource="{Binding Source={StaticResource myTodoList}}">
      <!--The ItemsControl has no default visual appearance.
          Use the Template property to specify a ControlTemplate to define
          the appearance of an ItemsControl. The ItemsPresenter uses the specified
          ItemsPanelTemplate (see below) to layout the items. If an
          ItemsPanelTemplate is not specified, the default is used. (For ItemsControl,
          the default is an ItemsPanelTemplate that specifies a StackPanel.-->
      <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl">
          <Border BorderBrush="Aqua" BorderThickness="1" CornerRadius="15">
            <ItemsPresenter/>
          </Border>
        </ControlTemplate>
      </ItemsControl.Template>
      <!--Use the ItemsPanel property to specify an ItemsPanelTemplate
          that defines the panel that is used to hold the generated items.
          In other words, use this property if you want to affect
          how the items are laid out.-->
      <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
          <WrapPanel />
        </ItemsPanelTemplate>
      </ItemsControl.ItemsPanel>
      <!--Use the ItemTemplate to set a DataTemplate to define
          the visualization of the data objects. This DataTemplate
          specifies that each data object appears with the Proriity
          and TaskName on top of a silver ellipse.-->
      <ItemsControl.ItemTemplate>
        <DataTemplate>
          <DataTemplate.Resources>
            <Style TargetType="TextBlock">
              <Setter Property="FontSize" Value="18"/>
              <Setter Property="HorizontalAlignment" Value="Center"/>
            </Style>
          </DataTemplate.Resources>
          <Grid>
            <Ellipse Fill="Silver"/>
            <StackPanel>
              <TextBlock Margin="3,3,3,0"
                         Text="{Binding Path=Priority}"/>
              <TextBlock Margin="3,0,3,7"
                         Text="{Binding Path=TaskName}"/>
            </StackPanel>
          </Grid>
        </DataTemplate>
      </ItemsControl.ItemTemplate>
      <!--Use the ItemContainerStyle property to specify the appearance
          of the element that contains the data. This ItemContainerStyle
          gives each item container a margin and a width. There is also
          a trigger that sets a tooltip that shows the description of
          the data object when the mouse hovers over the item container.-->
      <ItemsControl.ItemContainerStyle>
        <Style>
          <Setter Property="Control.Width" Value="100"/>
          <Setter Property="Control.Margin" Value="5"/>
          <Style.Triggers>
            <Trigger Property="Control.IsMouseOver" Value="True">
              <Setter Property="Control.ToolTip"
                      Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                              Path=Content.Description}"/>
            </Trigger>
          </Style.Triggers>
        </Style>
      </ItemsControl.ItemContainerStyle>
    </ItemsControl>
    
    
    

    The following illustration is a screenshot of the example when it is rendered.

    ItemsControl example screenshot

    Two other style-related properties of the ItemsControl that are not shown here are GroupStyle and GroupStyleSelector.

  • 相关阅读:
    Decode函数说明以及纵横表的转化
    数据库系统实现学习笔记二(数据库关系建模)--by穆晨
    数据库系统实现学习笔记一(数据库需求与ER建模)--by穆晨
    数据库—锁以及死锁的处理
    关系型数据库和非关系型数据库的区别
    数据库的一些基本概念(键、事务)
    ns2.34 移植MFLOOD协议时出现的问题
    第6章 函数
    第4章 表达式
    字符数组 & 字符串
  • 原文地址:https://www.cnblogs.com/fx2008/p/2423592.html
Copyright © 2011-2022 走看看