【转载】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.
The following illustration shows the ListBox control created in the previous example.
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.
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.
Two other style-related properties of the ItemsControl that are not shown here are GroupStyle and GroupStyleSelector.
邮箱:steven9801@163.com
QQ: 48039387