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.

  • 相关阅读:
    JSON 序列化类 南京酷得软件
    哈哈哈哈哈哈 找回记忆
    Presto
    (转)在Total Commander下使用SVN
    在ubuntu12.04,64位中安装lnmp一键包mysql的问题
    阿里云服务器上搭建php环境+redis
    在ubuntu12.04,64位中安装nginx+php+redis+mysql
    Redis篇:单线程I/O模型
    工具篇:apachehttpClient 和 jdk11HttpClient的使用
    技能篇:关于缓存数据的一致性探讨
  • 原文地址:https://www.cnblogs.com/fx2008/p/2423592.html
Copyright © 2011-2022 走看看