ItemControl,自定义集合类,是ListBox,ComBox的父类.只要设置ItemSource属性和ItemTemplate属性即可
<Window x:Class="ItemSourceTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ItemSourceTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding DataList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Margin="10">
<Label Content="{Binding Name}"
Width ="100"
Height="50"
Background="Yellow"></Label>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ItemSourceTest
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
this.dataList = new ObservableCollection<Mytest>();
LoadData();
}
private void LoadData()
{
DataList.Add(new Mytest { Name = "bbbbbbbb" });
DataList.Add(new Mytest { Name = "aaaaaaa" });
DataList.Add(new Mytest { Name = "bbbbbbbb" });
DataList.Add(new Mytest { Name = "bbbbbbbb" });
DataList.Add(new Mytest { Name = "aaaaaaa" });
DataList.Add(new Mytest { Name = "bbbbbbbb" });
}
private ObservableCollection<Mytest> dataList;
public ObservableCollection<Mytest> DataList
{
get { return dataList; }
set
{
dataList = value;
RaisePropertyChanged("DataList");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class Mytest
{
public string Name { get; set; }
}
}
注意:如果在DataTemplate中使用用户控件,会出现属性值绑定不上的情况
<ItemsControl x:Name="itemsControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border>
<local:DescriptionValueControl
ControlName="{Binding ItemName, Mode=TwoWay}"
ControlValue="{Binding ItemValue, Mode=TwoWay}"
ControlUnit="{Binding ItemUnit, Mode=TwoWay}"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>